গিট শাখায় সফল মডেল

গিট ব্যবহার করা গুরুত্বপূর্ণ।, আর যে সমন্বিত ডেভেলপমেন্ট এনভায়রনমেন্ট সফটওয়্যার সহজে সামলানোর উপযুক্ত রক্ষণাবেক্ষণ.

কৃতিত্ব

এই পোস্টটি মূল পর্তুগীজ সংস্করণ।, ইংরেজি ভাষায়, “সফল গিট branching মডেল“, পূরণকৃত লেখক কর্তৃক অনুমোদিত, ভিনসেন্ট Driessen. ধন্যবাদ মানুষ!

টেকনিক্যাল সমস্যার জন্য, কিছু শব্দ শুনেই ইংরেজীতে রাখা হয়েছে. আমার মৌলিক লেখা নিশ্চিত করতে চেষ্টা করেন, তবে স্বীকার করছি, আমি আমাদের ভাষায় বোঝার সুবিধার্থে নতুন করে যদি (EN). কোন সংশোধন বা উন্নয়ন অনুবাদে পরামর্শ স্বাগতম।.

ভূমিকা

এই পোস্টটি গিট ব্যবহার করে নয়. যদি এটি আপনার কি চাই?, একটু দেখে নেওয়া গিট সহায়িকা. আর সফটওয়্যার versioning কিভাবে আমাদের লক্ষ্য।, এই ক্ষেত্রে, চেহারা বিপুল Versioning.

দলের সহযোগিতা করে সফটওয়্যার versioning পরিচালনা করার প্রস্তাব।. জানো যখন তোমাকে অনেক প্রোগ্রামার হবে “মন্হন” একই সোর্স কোড? উন্নয়নের গতি থেকে গুরুত্বপূর্ণ, কিন্তু বিশাল মাথা তৈরি করতে পারে (সংস্কার ও rework) যদি এটা নিয়ন্ত্রণ. একে মুছে ডেভেলপার প্রতিরোধ করার জন্য অন্যের কাজ প্রগতিশীল বিকাশ নিশ্চিত করা এবং আয়োজন, উইন্ডোসমূহ দ্বন্দ্ব এবং সফ্টওয়্যার সংস্করণ পরিচালনা, আমরা গিট ও মডেল ব্যবহার করে। শাখা তারপর.

খালি টেমপ্লেট

এই পোস্টে আমি যে আমি কিছু আমার প্রকল্প উন্নয়ন মডেল উপস্থাপন (বিশেষ করে কাজ) কথা হল 1 বছর আগে, এবং এটা খুবই সফল হয়েছে. এ বিষয়ে লিখতে চেয়েছিলাম অনেক দিন ধরে, কিন্তু শিডিউল পাওয়া না পাওয়া, এ পর্যন্ত. প্রকল্পের বিস্তারিত আলোচনা করতে যাচ্ছি না, শুধু কৌশল সম্পর্কে শাখা এবং ব্যবস্থাপনা রিলিজ.

এই মডেল শুধুমাত্র উপর মনোযোগ প্রদান করেছে গিট হাতিয়ার হিসাবে versioning আমাদের সকল উত্ স কোড. (প্রসঙ্গক্রমে, আপনি যদি আগ্রহী করে গিট, আমাদের কোম্পানি GitPrime উপলব্ধ, রিয়েল-টাইম, অপ্টিমাইজেশন সফটওয়্যার প্রকৌশলের জন্য কিছু বিস্ময়কর তথ্য বিশ্লেষণ)

কেন গিট?

নুয়েভা গিট কেন্দ্রীয় সোর্স কোড নিয়ন্ত্রণ ব্যবস্থার সাথে তুলনা করা হয় এর বিস্তারিত আলোচনার জন্য, চেহারা একটি ওয়েব. সেখানে অসাধারণ। “যুদ্ধ” প্রায়. একজন ডেভেলপার হিসেবে, আমি গিট সব অন্যান্য বিদ্যমান সরঞ্জাম সম্পর্কে আজ প্রাধান্য. গিট ডেভেলপার কাজ করার কথা মনে হয় পথ বদলে সন্দেহ নেই একত্রীকরণ অথবা তৈরি করুন শাখা. আমি ক্লাসিক সংসার থেকে আসে Cvs/নাশকতামূলক, যেখানে একত্রীকরণ/ছাড়া শুধু কালে ভদ্রে দাও আর সবসময় একটু ভীতিকর মনে হয় (“দ্বন্দ্ব থেকে সাবধান একত্রীকরণ, তারা তোমাকে কামড়!”).

গিট দিয়ে এসব কাজ [একত্রীকরণ/ছাড়া] যারা অত্যন্ত সহজ ও ধরেন একটা বড় অংশ আমাদের কাজের রুটিন, আমায় বিশ্বাস করো. উদাহরণস্বরূপ, এ বই Csv/নাশকতামূলক, তা ছাড়াএকত্রীকরণ পরবর্তী অধ্যায় এ প্রথমবারের মতো ঢাকা (অগ্রসর ব্যবহারকারীদের জন্য), সময় কোন গিট বই, এই অধ্যায়ে দেখা যায় 3 (প্রাথমিক ধারণা).

তোমার সরলতা এবং পুনরাবৃত্তিমূলক প্রকৃতি, তা ছাড়াএকত্রীকরণ আর কিছু ভয় আছে।. আসলে, সংস্করণ নিয়ন্ত্রণ সরঞ্জাম করতে সহায়তা করা উচিতএকত্রীকরণ এবং তৈরি করুন শাখা বেশী কিছু.

কোন কথা নয়, যাক উন্নয়নের মডেল. এখানে উপস্থাপন করতে যাচ্ছি যা মডেল মূলত নির্ধারণ প্রক্রিয়ার প্রতিটি দলের সদস্য নিয়ন্ত্রিত সফটওয়্যার উন্নয়ন প্রক্রিয়া পৌছানোর জন্য সবপক্ষের অনুসরণ করতে হবে বেশী কিছু।.

বিকেন্দ্রিত, কিন্তু কেন্দ্রীয়

আমরা ব্যবহার এবং যে কাজ খুব ভাল এই মডেলের সঙ্গে অসাধারণ কনফিগারেশন তা ছাড়া গঠিত কেন্দ্রীয় ভান্ডার ছিল।. নোট করুন যে কেবল এই বিশ্রামস্থল। “বলে বিবেচিত” মধ্য (কারণ DVCS গিট [বিতরণ সংস্করণ নিয়ন্ত্রণ পদ্ধতি], অন্য কথায়, কারিগরি স্তরে কেন্দ্রীয় ভান্ডার মতো কিছু নেই।). আমরা এই রিপোজিটরী হিসেবে উল্লেখ করবেন উত্পত্তি, যেহেতু সব গিট ব্যবহারকারীদের কাছে পরিচিত নাম।.

প্রত্যেক ডেভেলপার করে তোলে। ক্রমানুসারেভ্রমণ জন্য উত্পত্তি. কিন্তু সম্পর্কের বাইরে পুশ-পুল কেননা কেন্দ্র [উত্পত্তি], প্রত্যেক ডেভেলপার সাথে বেছে নিতে পারেন [পুল] পরিবর্তনের ফর্ম উপ-দলের সাথে অন্য প্রকার. উদাহরণস্বরূপ, এই নতুন বড় কার্যকারিতা দুই বা ততোধিক ডেভেলপারদের সাথে কাজ করার জন্য উপযোগী হতে পারে, এর আগে পাঠানো হচ্ছে [ঠেলা] কাজের অগ্রগতি জন্য উত্পত্তি. উপরোক্ত চরিত্র, এলিস এবং বব উপ-দলের আছে, এলিস ও ডেভিড, আর ক্র্যাডল ও ডেভিড.

দুজনের, এর মানে কিছুই বেশি এলিস বব নামক দূরবর্তী গিট মন্ত্রি, বব গচ্ছিত করার নির্দেশ, এবং তদ্বিপরীত.

প্রধান শাখা

নেপথ্যে, উন্নয়নের এই মডেল বেশ চারপাশের বিদ্যমান মডেল দ্বারা অনুপ্রাণিত।. কেন্দ্রীয় ভান্ডার দুটি শাখা রয়েছে। [শাখা] অনন্ত জীবনের কাছে প্রধান:

  • মাস্টার
  • বিকশিত

দ্য শাখা মাস্টার মধ্যে উত্পত্তি প্রত্যেক ব্যবহারকারীকে গিট পরিচিত হওয়া উচিত. সাথে সমান্তরাল শাখা মাস্টার, আরেক শাখা নাম বিকশিত.

আমরা মনে করি। মূল/মাস্টার প্রধান শাখা হিসেবে যেখানে এই সোর্স কোড মাথা সব সময় অবস্থা প্রতিফলিত হয়েছে। উৎপাদন-তৈরী [উৎপাদনের জন্য প্রস্তুত].

আমরা মনে করি। মূল/উন্নয়ন হচ্ছে শাখা যেখানে মূল সোর্স কোড মাথা সবসময় রাজ্যের পরবর্তী সংস্করণে দেয়া সাম্প্রতিক পরিবর্তনের সাথে প্রতিফলিত হয়েছে।. যে কেউ এটাকে “শাখা ইন্টিগ্রেশন”. যে যেখানে বেশি অশুভ গঠন হবে।.

যখন সোর্স কোড আছে উন্নয়ন অধিশাখা আস্তাবল পয়েন্ট ও মুক্তি দিতে প্রস্তুত নাগালের [মুক্তি], সব পরিবর্তন কাঙ্ক্ষিত করা উচিত [লীন] ফেরত শাখা মাস্টার ও তখন একটি সংস্করণ সংখ্যা দিয়ে চিহ্নিত করা [মুক্তি]. এটা কিভাবে করা হয় বিস্তারিত, পরে আলোচনা করা হবে.

অতএব, প্রতিটি সময় পরিবর্তন অন্তর্ভুক্ত রয়েছে [লীন] de volta ao মাস্টার, é gerada uma nova versão [মুক্তি], por definição. Nós procuramos ser bastante rigorosos nisso, তারপর, teoricamente, poderíamos até usar um script hook do Git para criar e enviar automaticamente nossa aplicação para os servidores de produção sempre que houver um commitমাস্টার.

Branches auxiliares

Ao lado das শাখা principais, মাস্টারবিকশিত, nosso modelo de desenvolvimento usa uma variedade de শাখা de apoio para auxiliar o desenvolvimento simultâneo entre os integrantes da equipe, অথবা 1) facilita o rastreamento de novas funcionalidades [features], 2) prepara para entrega de uma nova versão [মুক্তি] ই 3) ajuda a rapidamente corrigir falhas em produção [hotfix]. Diferentemente dos শাখা principais, estes শাখা tem um tempo de vida curto, já que eventualmente serão removidos.

Os diferentes tipos de শাখা [auxiliares] que podemos usar, তারা:

  • Feature branches
  • Release branches
  • Hotfix branches

এদের প্রত্যেকের শাখা একটি বিশেষ উদ্দেশ্য রয়েছে এবং কঠোর নিয়ম-কানুন সংযুক্ত।, তাহলে, শাখা নিষ্পন্ন করতে পারেন শাখা আর সেই শাখা মার্জ করতে হবে [লীন] আপনার টার্গেট. আমরা প্রত্যেকেই দেখব [শাখা] পলক.

প্রযুক্তিগত দৃষ্টিকোণ অনুসারে, এই শাখা মনে করা হয় না “বিশেষ”. প্রত্যেক প্রকারের শাখা এটা কিভাবে আমরা এগুলিকে ব্যবহার করে ভাগ যেখানে।. পরিণামে, একটু সহজ হয়। শাখা সুন্দর পুরানো গিট.

Feature branches

[ফিচার ফিচার/কার্যকারিতা =]

– ব্রাঞ্চ করতে পারেন [শাখা] থেকে:
বিকশিত
– অতিক্রম করা উচিত-যদি [একত্রীকরণ] আবার:
বিকশিত
– নামকরণ রীতি শাখা:
কিছু, ছাড়া মাস্টার, বিকশিত, মুক্তি-*, অথবা hotfix-*

এই বৈশিষ্ট্য গাছের ডাল (অথবা কখনও কখনও বলা হয় বিষয় শাখা) ভবিষ্যত বা পরবর্তী সংস্করণে নতুন বৈশিষ্ট্যগুলি/কার্যকারিতা উন্নত করার জন্য ব্যবহৃত হয়. উন্নয়ন শুরু বৈশিষ্ট্য, a versão alvo em que esse recurso será incorporado pode muito bem ser desconhecida nesse ponto.

A essência de um বৈশিষ্ট্য গাছের ডাল é que ele existe enquanto a বৈশিষ্ট্য estiver em desenvolvimento, mas eventualmente será incorporado [লীন] de volta ao বিকশিত (para adicionar definitivamente a nova বৈশিষ্ট্য ao próximo মুক্তি) ou descartado (no caso de uma experiência mal sucedida).

Feature branches tipicamente existem apenas no repositório বিকশিত, não em উত্পত্তি.

Criando uma feature branches

$ git checkout -b myfeature develop
# Switched to a new branch "myfeature"

Incorporando uma feature finalizada no develop

Features finalizadas podem ser mescladas[লীন] com a উন্নয়ন অধিশাখা para adicioná-las definitivamente ao próximo মুক্তি.

$ git checkout develop
# Switched to branch 'develop'
$ git merge ---ff myfeature
# Updating ea1b82a..05e9557
# (Summary of changes)
# $ git branch -d myfeature
# Deleted branch myfeature (was 05e9557).
$ git push origin develop

A flag no-ff faz com que a mesclagem [একত্রীকরণ] sempre crie um novo objeto de commit, ainda que a mesclagem pudesse ser executada com um fast-forward [ff]. Isso evita que se perca informações sobre o histórico da existência de uma feature branch, agrupando todos os commits que foram adicionados à বৈশিষ্ট্য. Compare:

No último caso [da figura acima], é impossível ver a partir do histórico do Git quais dos commits foram implementados dentro de uma বৈশিষ্ট্য; você teria que ler manualmente todas as mensagens de log. Reverter uma বৈশিষ্ট্য inteira (অন্য কথায়, um grupo de commits), é uma verdadeira dor de cabeça na última situação, enquanto que é facilmente feito se a flag no-ff tiver sido usada.

সিম, isso criará mais alguns objetos de commits (vazios), mas o ganho é muito maior do que o custo.

Release branches

[Release = lançamento/entrega/versão]

– ব্রাঞ্চ করতে পারেন [শাখা] থেকে:
বিকশিত
– অতিক্রম করা উচিত-যদি [একত্রীকরণ] আবার:
বিকশিতমাস্টার
– নামকরণ রীতি শাখা:
মুক্তি-*

এই releases branches ajudam na preparação de uma nova versão de produção [production release]. Eles permitem colocar os pingos nos i’s de última hora. উপরন্তু, eles permitem pequenas correções de bugs e definição de meta-dados para uma মুক্তি (número de versão, datas de compilação, ইত্যাদি). Ao fazer todo esse trabalho em um release branch, The develop branch fica limpo para receber features da próxima grande মুক্তি [সংস্করণ].

O momento chave para se criar uma nova release branch ramificando de বিকশিত é quando o বিকশিত já está (quase) refletindo o estado desejado da nova মুক্তি [সংস্করণ]. Todas as features candidatas ao মুক্তি a ser construído devem ser incorporados [একত্রীকরণ] ao বিকশিত neste momento. Já os features voltados para রিলিজ futuros devem esperar uma próxima মুক্তি [সংস্করণ].

É exatamente no início de um release branch que o próximo মুক্তি recebe um número de versãonão antes. Até esse momento, The develop branch refletiu alterações para onext release” [próxima versão], mas não está claro se essapróxima versãoacabará por ser 0.3 অথবা 1.0, até que o release branch seja iniciado. Essa decisão é tomada no início do release branch e é realizada pelas regras do projeto sobre versionamento [sugiro ver sobreবিপুল Versioning“].

Criando um release branch

এই releases branches são criados a partir do develop branch. উদাহরণস্বরূপ, digamos que a versão 1.1.5 é a atual versão de produção e temos uma grande মুক্তি chegando. O estado de বিকশিত está pronto para apróxima versão” [next release] e decidimos que isso se tornaria a versão 1.2 (em vez de 1.1.6 অথবা 2.0). তারপর, nós nos ramificamos e damos ao release branch um nome refletindo o novo número de versão:

$ git checkout -b release-1.2 বিকশিত
# Switched to a new branch "release-1.2"
$ ./bump-সংস্করণ.sh 1.2
# Files modified successfully, version bumped to 1.2.
$ git commit -একটি -m "Bumped version number to 1.2"
# [release-1.2 74d9424] Bumped version number to 1.2
# 1 files changed, 1 insertions(+), 1 deletions(-)

Depois de criar um novo শাখা e acessá-lo, nos esbarramos no número da versão. Aqui, bump-version.sh é um script shell que altera alguns arquivos da cópia de trabalho para refletir a nova versão. (Isso pode, স্পষ্ট, ser uma mudança manualo ponto é que alguns arquivos mudam.) তারপর, é feito o commit do número da versão modificada.

Este novo শাখা pode existir lá por um tempo, até que a মুক্তি seja lançada definitivamente. Durante esse período, correções de erros podem ser aplicadas neste শাখা (em vez do develop branch). A adição de novos e grandes features aqui é estritamente proibida. Eles devem ser mesclados [লীন] মধ্যে বিকশিত ই, সুতরাং, aguardar o próximo grande মুক্তি.

Finalizando um release branch

Quando o release branch está pronto para se tornar uma versão real, algumas ações precisam ser realizadas. Primeiro, The release branch é mesclado em মাস্টার (uma vez que cada commitমাস্টার é uma nova versão por definição, lembre-se). Em seguida, esse commitমাস্টার deve ser marcado para facilitar uma futura referência a este histórico de versões. পরিশেষে, as mudanças feitas no release branch precisam ser mescladas [লীন] novamente para বিকশিত, de modo que os রিলিজ futuros também contenham essas correções de bugs.

As duas primeiras etapas no Git:

$ git checkout master
# Switched to branch 'master'
$ git merge ---ff release-1.2
# Merge made by recursive.
# (Summary of changes)
$ git tag -একটি 1.2

দ্য মুক্তি agora está concluído e marcado para futura referência.

মন্তব্য: você também pode usar as flags -s ou -u para assinar sua tag criptograficamente.

Para manter as mudanças feitas no release branch, precisamos juntá-las de volta ao বিকশিত. No Git:

$ git checkout develop
# Switched to branch 'develop'
$ git merge ---ff release-1.2
# Merge made by recursive.
# (Summary of changes)

Este passo pode levar a um conflito de mesclagem (provavelmente vá, uma vez que mudamos o número da versão). Em caso afirmativo, conserte e faça o commit.

এখন, que realmente terminamos, The release branch pode ser removido, já que não precisaremos mais dele:

$ git branch -d release-1.2
# Deleted branch release-1.2 (was ff452fe).

Hotfix branches

– ব্রাঞ্চ করতে পারেন [শাখা] থেকে:
মাস্টার
– অতিক্রম করা উচিত-যদি [একত্রীকরণ] আবার:
বিকশিতমাস্টার
– নামকরণ রীতি শাখা:
hotfix-*

এই Hotfix branches são muito parecidos com os release branches, pois eles também se destinam a preparar uma nova versão de produção, embora não planejada. Eles surgem da necessidade de agir imediatamente após um estado não desejado de uma versão de produção [em uso]. Quando ocorre um erro crítico em uma versão de produção, deve ser resolvido imediatamente, então um hotfix branch pode ser derivado da tag que marca a versão de produção existente no master branch.

A essência é que o trabalho dos membros da equipe (এ develop branch) pode continuar, enquanto outra pessoa está preparando uma rápida correção da falha em produção.

Criando o hotfix branch

এই hotfix branches são criados a partir do master branch. উদাহরণস্বরূপ, supondo que a versão 1.2 é a versão atual da release de produção rodando e apresenta problemas devido a um erro grave. Mudanças no বিকশিত deixam o ainda instável. Nós podemos então ramificar um hotfix branch e começar a solucionar o problema:

$ git checkout -b hotfix-1.2.1 মাস্টার
# Switched to a new branch "hotfix-1.2.1"
$ ./bump-সংস্করণ.sh 1.2.1
# Files modified successfully, version bumped to 1.2.1.
$ git commit -একটি -m "Bumped version number to 1.2.1"
# [hotfix-1.2.1 41e61bb] Bumped version number to 1.2.1
# 1 files changed, 1 insertions(+), 1 deletions(-)

Não esqueça de trocar o número da versão após a ramificação!

Em seguida, corrija o erro e faça o commit da correção em um ou mais commit separados.

$ git commit -m "Fixed severe production problem"
# [hotfix-1.2.1 abbe5d6] Fixed severe production problem
# 5 files changed, 32 insertions(+), 17 deletions(-)

Finalizando um hotfix branch

Quando terminado, The bugfix precisa ser mesclado de volta ao মাস্টার, mas também precisa ser incorporado novamente para বিকশিত, a fim de garantir que o bugfix também esteja incluído na próxima versão. Isso é bastante semelhante ao modo como as release branches são finalizadas.

Primeiro, atualize o মাস্টার e tag a মুক্তি [marque a verão]:

$ git checkout master
# Switched to branch 'master'
$ git merge ---ff hotfix-1.2.1
# Merge made by recursive.
# (Summary of changes)
$ git tag -একটি 1.2.1

মন্তব্য: você também pode usar as flags -s ou -u para assinar sua tag criptograficamente.

Em seguida, inclua o bugfixবিকশিত এছাড়াও:

$ git checkout develop
# Switched to branch 'develop'
$ git merge ---ff hotfix-1.2.1
# Merge made by recursive.
# (Summary of changes)

A única exceção à regra aqui é que, quando existir um release branch em andamento, as mudanças de hotfix precisam ser mescladas para esse release branch, ao invés de বিকশিত. Mesclar o bugfixrelease branch irá fazer com que o bugfix seja mesclado no বিকশিত এছাড়াও, quando o release branch for concluído. (Se o trabalho no বিকশিত requer imediatamente esse bugfix e não puder esperar até que o release branch seja concluído, você pode seguramente mesclar o bugfix জন্য deveolp também.)

পরিশেষে, remova a শাখা temporária:

$ git branch -d hotfix-1.2.1
# Deleted branch hotfix-1.2.1 (was abbe5d6).

সারাংশ

Embora não haja nada realmente extraordinário neste modelo de ramificação, a figura no início do Post pode ser muito útil em nossos projetos. Ela mostra um modelo mental fácil de compreender e permite aos membros da equipe desenvolver um entendimento comum dos processos de তা ছাড়াreleasing.

Uma versão em PDF de alta qualidade da figura é fornecida no blog do post original: http://nvie.com/posts/a-successful-git-branching-model/ [ou no link de Download abaixo]. Vá em frente e coloque-o na parede para obter uma rápida referência a qualquer momento.

মোট ব্যবহারের: 8822

একটি মন্তব্য “গিট শাখায় সফল মডেল

  1. Deivson জন্ম বলেছেন:

    শুভ বিকাল, আমি জানি গিট প্রাথমিকভাবে লিনাক্স সিস্টেম, কিন্তু যখন বলা হয় বহনযোগ্যতা উন্নত ছিল যে, আমি ভাবছি যদি গিট উইন্ডোজ এবং পজিক্স MSIS রান??

একটি উত্তর ত্যাগ

আপনার ইমেল ঠিকানা প্রকাশিত হবে না. প্রয়োজনীয় ক্ষেত্র চিহ্নিত করা হয় *