වෙනත් සංවර්ධකයෙකු සමඟ ව්යාපෘතියක් සඳහා මම දැන් මාස කිහිපයක් තිස්සේ Git භාවිතා කරමි. මට SVN සමඟ වසර ගණනාවක අත්දැකීම් ඇත , එබැවින් මම සම්බන්ධතාවයට බොහෝ ගමන් මලු ගෙන එනු ඇතැයි අනුමාන කරමි.
අතු බෙදීම හා ඒකාබද්ධ කිරීම සඳහා Git විශිෂ්ට බව මම අසා ඇත්තෙමි, මෙතෙක් මම එය නොදකිමි. අතු බෙදීම සරලයි, නමුත් මම ඒකාබද්ධ කිරීමට උත්සාහ කරන විට, සියල්ල නිරයට යයි. දැන්, මම ඒ සඳහා එස්.වී.එන් වෙතින් පුරුදු වී සිටිමි, නමුත් මට පෙනෙන්නේ මම එක් උප-පාර්-අනුවාද පද්ධතියක් තවත් වෙළඳාමක් සඳහා වෙළඳාම් කළ බවය.
මගේ සහකරු මට පවසන්නේ මගේ ගැටලු පැන නගින්නේ විලී-නිලි ඒකාබද්ධ කිරීමට ඇති මගේ ආශාව නිසා බවත්, බොහෝ අවස්ථාවන්හිදී ඒකාබද්ධ කිරීම වෙනුවට මම නැවත භාවිතා කළ යුතු බවත්ය. උදාහරණයක් ලෙස, ඔහු විසින් සකස් කරන ලද කාර්ය ප්රවාහය මෙන්න:
clone the remote repository
git checkout -b my_new_feature
..work and commit some stuff
git rebase master
..work and commit some stuff
git rebase master
..finish the feature
git checkout master
git merge my_new_feature
අත්යවශ්යයෙන්ම, විශේෂාංග ශාඛාවක් සාදන්න, සෑම විටම ස්වාමියාගේ සිට ශාඛාව දක්වා ප්රතිස්ථාපනය කරන්න, සහ ශාඛාවේ සිට නැවත ස්වාමියා දක්වා ඒකාබද්ධ කරන්න. සැලකිල්ලට ගත යුතු වැදගත් කරුණ නම් ශාඛාව සැමවිටම දේශීයව පැවතීමයි.
මෙන්න මම ආරම්භ කළ කාර්ය ප්රවාහය
clone remote repository
create my_new_feature branch on remote repository
git checkout -b --track my_new_feature origin/my_new_feature
..work, commit, push to origin/my_new_feature
git merge master (to get some changes that my partner added)
..work, commit, push to origin/my_new_feature
git merge master
..finish my_new_feature, push to origin/my_new_feature
git checkout master
git merge my_new_feature
delete remote branch
delete local branch
අත්යවශ්ය වෙනස්කම් දෙකක් තිබේ (මම හිතන්නේ): මම නැවත ඒකාබද්ධ කිරීම වෙනුවට සෑම විටම ඒකාබද්ධ කිරීම භාවිතා කරන අතර, මගේ විශේෂාංග ශාඛාව (සහ මගේ විශේෂාංග ශාඛාව කොමිස්) දුරස්ථ ගබඩාවට තල්ලු කරමි.
දුරස්ථ ශාඛාව සඳහා මගේ තර්කය නම්, මම වැඩ කරන විට මගේ වැඩ කටයුතු උපස්ථ කිරීමට මට අවශ්ය බවය. අපගේ ගබඩාව ස්වයංක්රීයව උපස්ථ වන අතර යමක් වැරදුනහොත් එය ප්රතිස්ථාපනය කළ හැකිය. මගේ ලැප්ටොප් එක තරයේ හෝ නැත. එමනිසා, මගේ ලැප්ටොප් පරිගණකයේ වෙනත් තැනක පිළිබිඹු නොවන කේතයක් තිබීමට මම අකමැතියි.
නැවත එකතු කිරීම වෙනුවට ඒකාබද්ධ කිරීම සඳහා මගේ තර්කය නම්, ඒකාබද්ධ කිරීම සම්මතයක් ලෙස පෙනෙන අතර නැවත ලබා ගැනීම උසස් අංගයක් ලෙස පෙනේ. මගේ බඩවැල් හැඟීම නම් මම කිරීමට උත්සාහ කරන්නේ දියුණු සැකසුමක් නොවන නිසා නැවත ලබා ගැනීම අනවශ්ය විය යුතුය. මම Git පිළිබඳ නව ප්රායෝගික ක්රමලේඛන පොත පවා පරීක්ෂා කර බැලුවෙමි. ඒවා ඒකාබද්ධ කිරීම පුළුල් ලෙස ආවරණය කරයි.
කෙසේ හෝ වේවා, මම මෑත කාලීන ශාඛාවක් මත මගේ කාර්ය ප්රවාහය අනුගමනය කරමින් සිටියෙමි, මම එය නැවත ස්වාමියා සමඟ ඒකාබද්ධ කිරීමට උත්සාහ කළ විට, ඒ සියල්ල අපායට ගියේය. වැදගත් නොවිය යුතු දේවල් සමඟ ගැටුම් ටොන් ගණනක් තිබුණි. ගැටුම් මට තේරුණේ නැත. සෑම දෙයක්ම නිරාකරණය කිරීමට මට දිනක් ගත වූ අතර, අවසානයේදී මගේ ප්රාදේශීය ස්වාමියා සියලු ගැටුම් නිරාකරණය කර ඇති නමුත් දුරස්ථ මාස්ටර් වෙත බලහත්කාරයෙන් තල්ලු කිරීම අවසන් විය, නමුත් දුරස්ථයා තවමත් සතුටු නොවීය.
මේ වගේ දෙයක් සඳහා "නිවැරදි" කාර්ය ප්රවාහය කුමක්ද? Git අතු බෙදීම හා ඒකාබද්ධ කිරීම සුපිරි පහසු කරවන අතර මම එය නොදකිමි.
යාවත්කාලීන කිරීම 2011-04-15
මෙය ඉතා ජනප්රිය ප්රශ්නයක් බව පෙනේ, එබැවින් මම මුලින් ඇසූ දා සිට මගේ අවුරුදු දෙකක අත්දැකීම් සමඟ යාවත්කාලීන කිරීමට සිතුවෙමි.
අවම වශයෙන් අපගේ නඩුවේදී වුවද, මුල් කාර්ය ප්රවාහය නිවැරදි බව පෙනේ. වෙනත් වචන වලින් කිවහොත්, මෙය අප කරන අතර එය ක්රියාත්මක වේ:
clone the remote repository
git checkout -b my_new_feature
..work and commit some stuff
git rebase master
..work and commit some stuff
git rebase master
..finish the feature, commit
git rebase master
git checkout master
git merge my_new_feature
ඇත්ත වශයෙන්ම, අමු ඒකාබද්ධ කිරීම් වෙනුවට ස්කොෂ් ඒකාබද්ධ කිරීම් කිරීමට අප නැඹුරු වන බැවින් අපගේ කාර්ය ප්රවාහය ටිකක් වෙනස් ය . ( සටහන: මෙය මතභේදාත්මක ය, පහත බලන්න. ) මෙය අපගේ සමස්ත අංග ශාඛාවම ස්වාමියා මත තනි කැපවීමක් බවට පත් කිරීමට ඉඩ දෙයි. ඉන්පසු අපි අපගේ විශේෂාංග ශාඛාව මකා දමමු. අපගේ ශාඛා වල ටිකක් අවුල් සහගත වුවත්, අපගේ කාර්යයන් මාස්ටර් මත තාර්කිකව සැකසීමට මෙය අපට ඉඩ දෙයි. ඉතින්, අපි කරන්නේ මෙයයි:
clone the remote repository
git checkout -b my_new_feature
..work and commit some stuff
git rebase master
..work and commit some stuff
git rebase master
..finish the feature, commit
git rebase master
git checkout master
git merge --squash my_new_feature
git commit -m "added my_new_feature"
git branch -D my_new_feature
ස්කොෂ් ඒකාබද්ධ කිරීමේ මතභේදය - විචාරකයින් කිහිප දෙනෙකු පෙන්වා දී ඇති පරිදි, ස්කොෂ් ඒකාබද්ධ කිරීම ඔබගේ විශේෂාංග ශාඛාවේ ඇති සියලුම ඉතිහාසය ඉවත දමනු ඇත. නමට අනුව, එය සියලු කැපවීම් එකකට බෙදයි. කුඩා විශේෂාංග සඳහා, එය තනි පැකේජයකට enses නීභවනය වන බැවින් මෙය අර්ථවත් කරයි. විශාල විශේෂාංග සඳහා, එය බොහෝ විට හොඳ අදහසක් නොවේ, විශේෂයෙන් ඔබේ තනි කොමිස් දැනටමත් පරමාණුක නම්. එය සැබවින්ම පුද්ගලික මනාපයන් වෙතට පැමිණේ.
ගිතුබ් සහ බිට්බකට් (වෙනත් අය?) ඉල්ලීම් අදින්න - ඔබ ඉල්ලීම් සමඟ ඒකාබද්ධ කිරීම / නැවත සකස් කිරීම සම්බන්ධ වන්නේ කෙසේදැයි ඔබ කල්පනා කරන්නේ නම්, ඔබ නැවත ස්වාමියා සමඟ ඒකාබද්ධ වීමට සූදානම් වන තෙක් ඉහත සියලු පියවර අනුගමනය කිරීමට මම නිර්දේශ කරමි. Git සමඟ අතින් ඒකාබද්ධ කිරීම වෙනුවට, ඔබ PR පිළිගනී. මෙය ස්කොෂ් ඒකාබද්ධ කිරීමක් සිදු නොකරන බව සලකන්න (අවම වශයෙන් පෙරනිමියෙන් නොවේ), නමුත් ස්කොෂ් නොවන, වේගයෙන් ඉදිරියට නොයෑම යනු පුල් ඉල්ලීම් ප්රජාවේ (මා දන්නා පරිදි) පිළිගත් ඒකාබද්ධ කිරීමේ සම්මුතියයි. විශේෂයෙන්, එය මේ ආකාරයට ක්රියා කරයි:
clone the remote repository
git checkout -b my_new_feature
..work and commit some stuff
git rebase master
..work and commit some stuff
git rebase master
..finish the feature, commit
git rebase master
git push # May need to force push
...submit PR, wait for a review, make any changes requested for the PR
git rebase master
git push # Will probably need to force push (-f), due to previous rebases from master
...accept the PR, most likely also deleting the feature branch in the process
git checkout master
git branch -d my_new_feature
git remote prune origin
මම Git ට ආදරය කර ඇති අතර කිසි විටෙකත් SVN වෙත යාමට අවශ්ය නැත. ඔබ අරගල කරන්නේ නම්, එය සමඟම රැඳී සිටින්න, අවසානයේදී ඔබට උමග අවසානයේ ආලෝකය පෙනෙනු ඇත.
rebase
අවබෝධය සඳහා බොහෝ උපකාර විය