الشجرة الفرعية جيت بالتفصيل

عند اتخاذ قرار باستخدام هذه الأداة أو تلك في مشاريعه الخاصة ، يجب على المهندس ليس فقط دراسة الوثائق الداعمة ، ولكن أيضًا إجراء سلسلة من التجارب لتجنب المشاكل المحتملة في المستقبل. إذا كنا نتحدث عن سياسة CM طويلة المدى ، فإن سعر خطأ الاختيار يصبح مرتفعًا جدًا.


الغرض من هذه الورقة هو ممارسة أداة إدارة الشجرة الفرعية Git .



بدءًا من المراجعة 1.7.11 ، يحتوي مستودع Git upstream ، في دليل Contrib / الشجرة الفرعية ، على أداة لأتمتة العمل مع الأشجار الفرعية .


إن خدمة git-subtree (1) هي في الواقع إضافة مفيدة تستخدم دالتين git-read-tree (1) و git-write-tree (1) . لذلك ، الروابط في أوامر git-subtree (1) تضيف / تسحب / تدفع :

git subtree add --prefix=<subdir> <remote> <ref> 

يمكن أن يكون إما أسماء فروع أو أسماء علامات لمستودع بعيد.


بالإضافة إلى ذلك ، إذا قمت بإضافة المستودع البعيد إلى ملف التكوين الخاص بالمستودع المحلي .git / config مسبقًا ، باستخدام الأمر:


 bash-4.4$ git remote add build-system ../../remote/build-system.git 

حيث build-system هو اسم المستودع البعيد ../../remote/build-system.git ، ثم لاحقًا ، باستخدام أوامر git-subtree (1) add / pull / push ، يمكننا الرجوع إلى المنبع / المستودع المنبع build-system.git بالاسم.


في الوقت الحالي ، لا تتطور git-subtree (1) عمليًا ، ولكن يتم تحديثها فقط للدرجة الحالية من تطوير مشروع Git .


ومع ذلك ، فإن git-subtree (1) هي الأداة الأكثر شعبية وقوة للعمل مع الشجرة الفرعية.



بيئة الاختبار


في مقالة git-subrepo (1) السابقة ، استخدمنا بنية دليل بسيطة مع مستودعات اختبار لتوضيح كيفية عمل الوظائف في الممارسة. الآن نقوم بإعادة إنتاج البيئة التالية:


 bash-4.4$ vim _init.sh #!/bin/sh CWD=`pwd` mkdir remote owner user cd remote git init --bare build-system.git git init --bare platform.git cd ../owner git clone $CWD/remote/build-system.git git clone $CWD/remote/platform.git cd build-system echo -e "\n[master] build-system 1.0.0\n" >README git add README git commit -m "init build-system master 1.0.0" git push cd ../platform echo -e "\n[master] platform 1.0.0\n" >README git add README git commit -m "init platform master 1.0.0" git push cd ../../user git clone $CWD/remote/build-system.git git clone $CWD/remote/platform.git cd $CWD :wq bash-4.4$ chmod a+x ./_init.sh bash-4.4$ ./_init.sh bash-4.4$ 

هنا


مالك-دليل عمل مؤلف المشروع ؛
بعيد-دليل يمثل خادم مؤلف المشاريع ، حيث توجد مستودعات المنبع لـ platform.git الرئيسية للمشروع والمشروع الفرعي build-system.git ؛
المستخدم-دليل عمل المستخدم أو عضو فريق التطوير.

كأهداف لدراسة قدرات git-subtree (1) ، سننظر في جميع المهام نفسها التي تحدثنا عنها في مقالة Git Subrepo ، ولكن مع مراعاة الاختلافات بين الأداتين.



ربط الشجرة الفرعية


تذكر الحالة الحالية لمستودع بعيد / platform.git :


 bash-4.4$ bash-4.4$ cd owner/platform/ bash-4.4$ git log commit 7fad4becbd13258216fb95cbe9d987dd33f0be6d (HEAD -> master, origin/master) Author: user <___@_______> Date: Thu Nov 1 20:16:33 2018 +0300 init platform master 1.0.0 bash-4.4$ 

وقم بتوصيل الفرع الرئيسي لمخزن المنبع البعيد / build-system.git بدليل نظام البناء:


 bash-4.4$ bash-4.4$ git subtree add --prefix=build-system ../../remote/build-system.git/ master git fetch ../../remote/build-system.git/ master warning: no common commits remote: Enumerating objects: 3, done. remote: Counting objects: 100% (3/3), done. remote: Total 3 (delta 0), reused 0 (delta 0) Unpacking objects: 100% (3/3), done. From ../../remote/build-system * branch master -> FETCH_HEAD Added dir 'build-system' bash-4.4$ 

خذ بعين الاعتبار الحالة الجديدة للنسخة المحلية من مستودع remote / platform.git :


 bash-4.4$ bash-4.4$ git log --graph * commit 47905bcb80be6f7cb3030513986fad4df548f812 (HEAD -> master) |\ Merge: 7fad4be 783c6d5 | | Author: user <___@_______> | | Date: Thu Nov 1 20:20:20 2018 +0300 | | | | Add 'build-system/' from commit '783c6d5af1100e9665f930c818c861ff011bed19' | | | | git-subtree-dir: build-system | | git-subtree-mainline: 7fad4becbd13258216fb95cbe9d987dd33f0be6d | | git-subtree-split: 783c6d5af1100e9665f930c818c861ff011bed19 | | git-subtree-repo: ../../remote/build-system.git/ | | git-subtree-ref: master | | | * commit 783c6d5af1100e9665f930c818c861ff011bed19 | Author: user <___@_______> | Date: Thu Nov 1 20:16:33 2018 +0300 | | init build-system master 1.0.0 | * commit 7fad4becbd13258216fb95cbe9d987dd33f0be6d (origin/master) Author: user <___@_______> Date: Thu Nov 1 20:16:33 2018 +0300 init platform master 1.0.0 bash-4.4$ 

هنا يجب الانتباه إلى الرسالة القائلة بأن الأمر git-subtree (1) add left left. في الواقع ، باستخدام هذا الأمر ، نضع الفرق في مستودع النظام الأساسي :


 bash-4.4$ bash-4.4$ git diff 7fad4becbd13258216fb95cbe9d987dd33f0be6d 47905bcb80be6f7cb3030513986fad4df548f812 diff --git a/build-system/README b/build-system/README new file mode 100644 index 0000000..73a41c7 --- /dev/null +++ b/build-system/README @@ -0,0 +1,3 @@ + +[master] build-system 1.0.0 + bash-4.4$ 

علاوة على ذلك ، عندما يذهب تاريخ التغييرات إلى أبعد من ذلك قليلاً ، سندرس تفاصيل ربط الشجرة الفرعية بمزيد من التفاصيل ، والآن سنضع تغييراتنا في مستودع المنبع البعيد / platform.git :


 bash-4.4$ bash-4.4$ git push Enumerating objects: 6, done. Counting objects: 100% (6/6), done. Delta compression using up to 4 threads Compressing objects: 100% (3/3), done. Writing objects: 100% (5/5), 582 bytes | 582.00 KiB/s, done. Total 5 (delta 0), reused 0 (delta 0) To ../../remote/platform.git 7fad4be..47905bc master -> master bash-4.4$ 

وإلقاء نظرة مرة أخرى على الشجرة الفرعية git-subtry (1) :


  Add 'build-system/' from commit '783c6d5af1100e9665f930c818c861ff011bed19' git-subtree-dir: build-system git-subtree-mainline: 7fad4becbd13258216fb95cbe9d987dd33f0be6d git-subtree-split: 783c6d5af1100e9665f930c818c861ff011bed19 git-subtree-repo: ../../remote/build-system.git/ git-subtree-ref: master 

هذه الرسائل مفيدة بحيث يمكنك ، إذا لزم الأمر ، العثور على سجل الاتصال والحالة الحالية للشجرة الفرعية. لا يضيف الأمر git-subtree (1) الأصلي السطرين الأخيرين من الرسالة. قمنا بتعديل هذه الأداة بشكل طفيف لتسهيل البحث عن معلومات حول وقت ومن أي فرع من المستودع البعيد تم إنشاء هذه الشجرة الفرعية أو مشروعنا.


يمكنك الحصول على ملف الاختلاف الكامل لتغييراتنا على النحو التالي:


 bash-4.4$ bash-4.4$ git clone https://github.com/radix-platform/git.git bash-4.4$ cd git bash-4.4$ git checkout git-subtree-2.19.1 bash-4.4$ git diff v2.19.1 > ../git-subtree-2.19.1.patch bash-4.4$ 

لجعل أمثلةنا أكثر واقعية ، سنقوم بإجراء تغييرات على مستودع المنبع البعيد / build-system.git :


 bash-4.4$ bash-4.4$ cd owner/build-system/ bash-4.4$ vim README bash-4.4$ cat README [master] build-system 1.0.1 bash-4.4$ 

احفظ هذه التغييرات:


 bash-4.4$ bash-4.4$ git add README bash-4.4$ git commit -m "update build-system version to 1.0.1" [master e5c5446] update build-system version to 1.0.1 1 file changed, 1 insertion(+), 1 deletion(-) bash-4.4$ 

وتمريرها إلى مستودع التحكم عن بعد / build-system.git upstream:


 bash-4.4$ bash-4.4$ git push Enumerating objects: 5, done. Counting objects: 100% (5/5), done. Writing objects: 100% (3/3), 274 bytes | 274.00 KiB/s, done. Total 3 (delta 0), reused 0 (delta 0) To ../../remote/build-system.git 783c6d5..e5c5446 master -> master bash-4.4$ 

لذا ، فقد تغيرت مراجعة مستودع نظام البناء من 783c6d5 إلى e5c5446:


 bash-4.4$ bash-4.4$ git log commit e5c5446967599065dc02a269d8fcfc2c1d3c4f65 (HEAD -> master, origin/master) Author: user <___@_______> Date: Thu Nov 1 20:26:52 2018 +0300 update build-system version to 1.0.1 commit 783c6d5af1100e9665f930c818c861ff011bed19 Author: user <___@_______> Date: Thu Nov 1 20:16:33 2018 +0300 init build-system master 1.0.0 bash-4.4$ 

تذكر هذه الحالة وانتقل إلى العمل مع جهاز التحكم عن بعد لمستودع الحاوية / platform.git .



استرداد التغييرات من مستودع الشجرة الفرعية الرئيسي


لنفترض أننا ما زلنا لا نعرف عن التغييرات في مستودع المنبع للشجرة الفرعية ونعمل على تحسين كود المنصة :


 bash-4.4$ bash-4.4$ cd owner/platform/ bash-4.4$ vim README bash-4.4$ cat README [master] platform 1.0.1 bash-4.4$ bash-4.4$ git add README bash-4.4$ git commit -m "update platform version to 1.0.1" [master 442c9e9] update platform version to 1.0.1 1 file changed, 1 insertion(+), 1 deletion(-) bash-4.4$ bash-4.4$ git push Enumerating objects: 5, done. Counting objects: 100% (5/5), done. Delta compression using up to 4 threads Compressing objects: 100% (2/2), done. Writing objects: 100% (3/3), 306 bytes | 306.00 KiB/s, done. Total 3 (delta 0), reused 0 (delta 0) To ../../remote/platform.git 47905bc..442c9e9 master -> master bash-4.4$ 

نتيجة لعملنا ، حصلنا على الحالة التالية لمستودع بعيد / platform.git :


 bash-4.4$ bash-4.4$ git log --graph * commit 442c9e94c9890032fb2f3123661345d465e2849f (HEAD -> master, origin/master) | Author: user <___@_______> | Date: Thu Nov 1 20:41:40 2018 +0300 | | update platform version to 1.0.1 | * commit 47905bcb80be6f7cb3030513986fad4df548f812 |\ Merge: 7fad4be 783c6d5 | | Author: user <___@_______> | | Date: Thu Nov 1 20:20:20 2018 +0300 | | | | Add 'build-system/' from commit '783c6d5af1100e9665f930c818c861ff011bed19' | | | | git-subtree-dir: build-system | | git-subtree-mainline: 7fad4becbd13258216fb95cbe9d987dd33f0be6d | | git-subtree-split: 783c6d5af1100e9665f930c818c861ff011bed19 | | git-subtree-repo: ../../remote/build-system.git/ | | git-subtree-ref: master | | | * commit 783c6d5af1100e9665f930c818c861ff011bed19 | Author: user <___@_______> | Date: Thu Nov 1 20:16:33 2018 +0300 | | init build-system master 1.0.0 | * commit 7fad4becbd13258216fb95cbe9d987dd33f0be6d Author: user <___@_______> Date: Thu Nov 1 20:16:33 2018 +0300 init platform master 1.0.0 bash-4.4$ 

الآن ، سيكون من الجيد معرفة ما حدث في المستودع الرئيسي للشجرة الفرعية لنظام البناء أثناء عملنا على تحسين الشفرة في المستودع الرئيسي لمشروعنا. قم بالتمرير خلال الشجرة الفرعية أولاً باستخدام الأمر git subtree - list :


 bash-4.4$ bash-4.4$ git subtree --list build-system ../../remote/build-system.git/ branch master HEAD bash-4.4$ 

يعرض هذا الأمر ، بتنسيق بسيط ، دليل الشجرة الفرعية ، وعنوان URL الخاص بالمستودع الرئيسي للشجرة الفرعية ، ونوع الرابط (الفرع أو العلامة) ، واسم الارتباط ، بالإضافة إلى مراجعة الفرع أو العلامة المحددة للمستودع ، التي نضع رمزها في الشجرة الفرعية. ومع ذلك ، فإننا نتذكر أن تطوير المشروع الفرعي لنظام البناء قد مضى وأن الإشارة إلى رأس الفرع الرئيسي لم تعد صالحة. بدلاً من ذلك ، هذه رسالة حول ما نود أن يكون لدينا في مستودعنا ، وليس الحالة الفعلية.


من أجل معرفة مدى تقدم الشفرة في مستودع المنبع لشجرة فرعية ، نحتاج أيضًا إلى التمرير عبر الأشجار الفرعية ، ولكن باستخدام الخيار -d :


 bash-4.4$ bash-4.4$ git subtree -d --list Looking for externals... Commit: 47905bcb80be6f7cb3030513986fad4df548f812 build-system ../../remote/build-system.git/ branch master HEAD The 'build-system' subtree seems not updated: original revision: 783c6d5af1100e9665f930c818c861ff011bed19 remote revision: e5c5446967599065dc02a269d8fcfc2c1d3c4f65 You can update 'build-system' subtree by following command: git subtree pull --prefix=build-system ../../remote/build-system.git/ master bash-4.4$ 

الآن ، يشير الناتج إلى أنه بينما كنا نعمل على رمز المستودع الرئيسي ، فإن الفرع الرئيسي للمستودع الرئيسي للشجرة الفرعية لنظام البناء قد تقدم. بالإضافة إلى ذلك ، أصدر الأمر git subtree -d --list تلميحًا بأنه يمكننا الحصول على تغييرات في مستودع الشجرة الفرعية الرئيسي على النحو التالي:


 bash-4.4$ bash-4.4$ git subtree pull --prefix=build-system ../../remote/build-system.git/ master remote: Enumerating objects: 5, done. remote: Counting objects: 100% (5/5), done. remote: Total 3 (delta 0), reused 0 (delta 0) Unpacking objects: 100% (3/3), done. From ../../remote/build-system * branch master -> FETCH_HEAD hint: Waiting for your editor to close the file... 

هذا الأمر ، بما أننا لم نحدد -m "الالتزام بالرسالة" ، يفتح المحرر بنص الرسالة:


دمج الالتزام "e5c5446967599065dc02a269d8fcfc2c1d3c4f65"

# الرجاء إدخال رسالة التزام لتوضيح سبب ضرورة هذا الدمج ،
# خاصة إذا كان يدمج المنبع المحدث في فرع الموضوع.
#
# سيتم تجاهل الأسطر التي تبدأ بـ "#" ، وسيتم إحباط رسالة فارغة
# ارتكاب.

استبدل هذا النص بنص أكثر إفادة:


سحب التغييرات من سيد مستودع upstream build-system.git:

دمج الالتزام "e5c5446967599065dc02a269d8fcfc2c1d3c4f65"

بعد حفظ هذه الرسالة وإغلاق المحرر ، نحصل على النتيجة التالية:


 Merge made by the 'recursive' strategy. build-system/README | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) bash-4.4$ 

أي أننا تلقينا تغييرات على المستودع الرئيسي البعيد / build-system.git وحفظناها في الشبكة الفرعية لنظام البناء للنسخة المحلية من المستودع الرئيسي البعيد / platform.git .


تحقق من حالة المستودع المحلي:


 bash-4.4$ bash-4.4$ git status On branch master Your branch is ahead of 'origin/master' by 2 commits. (use "git push" to publish your local commits) nothing to commit, working tree clean bash-4.4$ 

لكي يتمكن المستخدمون الآخرون من المشروع من الحصول على هذه التغييرات ، نحتاج إلى وضعها في مخزن المنبع البعيد / platform.git :


 bash-4.4$ bash-4.4$ git push Enumerating objects: 9, done. Counting objects: 100% (8/8), done. Delta compression using up to 4 threads Compressing objects: 100% (3/3), done. Writing objects: 100% (5/5), 583 bytes | 583.00 KiB/s, done. Total 5 (delta 0), reused 0 (delta 0) To ../../remote/platform.git 442c9e9..ea52eab master -> master bash-4.4$ 

دعونا نرى ما تحتويه النسخة المحلية من مستودع النظام الأساسي الآن ، بالإضافة إلى مستودع التحكم عن بُعد عن المنصة / platform.git :


 bash-4.4$ bash-4.4$ git log --graph * commit ea52eabd5910159efabd80adcf522f22bf6a2af2 (HEAD -> master, origin/master) |\ Merge: 442c9e9 e5c5446 | | Author: user <___@_______> | | Date: Thu Nov 1 20:48:05 2018 +0300 | | | | Pull changes from master of upstream build-system.git repository. | | | | Merge commit 'e5c5446967599065dc02a269d8fcfc2c1d3c4f65' | | | * commit e5c5446967599065dc02a269d8fcfc2c1d3c4f65 | | Author: user <___@_______> | | Date: Thu Nov 1 20:26:52 2018 +0300 | | | | update build-system version to 1.0.1 | | * | commit 442c9e94c9890032fb2f3123661345d465e2849f | | Author: user <___@_______> | | Date: Thu Nov 1 20:41:40 2018 +0300 | | | | update platform version to 1.0.1 | | * | commit 47905bcb80be6f7cb3030513986fad4df548f812 |\ \ Merge: 7fad4be 783c6d5 | |/ Author: user <___@_______> | | Date: Thu Nov 1 20:20:20 2018 +0300 | | | | Add 'build-system/' from commit '783c6d5af1100e9665f930c818c861ff011bed19' | | | | git-subtree-dir: build-system | | git-subtree-mainline: 7fad4becbd13258216fb95cbe9d987dd33f0be6d | | git-subtree-split: 783c6d5af1100e9665f930c818c861ff011bed19 | | git-subtree-repo: ../../remote/build-system.git/ | | git-subtree-ref: master | | | * commit 783c6d5af1100e9665f930c818c861ff011bed19 | Author: user <___@_______> | Date: Thu Nov 1 20:16:33 2018 +0300 | | init build-system master 1.0.0 | * commit 7fad4becbd13258216fb95cbe9d987dd33f0be6d Author: user <___@_______> Date: Thu Nov 1 20:16:33 2018 +0300 init platform master 1.0.0 bash-4.4$ 


نرى أن الحالة الأولية لمستودع التحكم عن بعد / build-system.git ، في الوقت الذي كانت متصلة به كشجرة فرعية للنظام الأساسي ، كانت 783c6d5af1100e9665f930c818c861ff011bed19 . ومع ذلك ، أثناء عملنا على الشفرة في مستودع النظام الأساسي ، تغيرت حالة المستودع وأصبحت مساوية لـ e5c5446967599065dc02a269d8fcfc2c1d3c4f65 .

كانت الحالة الأولية لنظام البناء ( 783c6d5af1100e9665f930c818c861ff011bed19 ) بالفعل في تاريخ مستودع النظام الأساسي عندما كانت في 442c9e94c9890032fb2f3123661345d465e2849f . لذلك ، نحتاج إلى أخذ حالة المنصة على 442c9e94c9890032fb2f3123661345d465e2849f وحالة نظام البناء على e5c5446967599065dc02a269d8fcfc2c1d3c4f65 ، وحساب الفرق بينهما ، وتراكب الفرق الناتج على الفرع الرئيسي.


هذه هي العملية المعيارية لدمج الفروع ، والتي يمكن التعبير عن جوهرها بواسطة الصيغة


  p[n] = p[n-1] + diff(p[n-1], b[n]) 

أين


  p[n] = ea52eabd5910159efabd80adcf522f22bf6a2af2, p[n-1] = 442c9e94c9890032fb2f3123661345d465e2849f, b[n] = e5c5446967599065dc02a269d8fcfc2c1d3c4f65. 

يعمل p هنا كفرع رئيسي ، و b ، يلعب دور الفرع الذي سبق فصله عن الرئيسي من أجل إنشاء وظائف جديدة.


فكر مرة أخرى في الرسالة التي أعدتها أداة git-subtree (1) لنا أثناء تنفيذ أمر git-subtree-pull :


  git subtree pull --prefix=build-system ../../remote/build-system.git/ master 


دمج الالتزام "e5c5446967599065dc02a269d8fcfc2c1d3c4f65"

# الرجاء إدخال رسالة التزام لتوضيح سبب ضرورة هذا الدمج ،
# خاصة إذا كان يدمج المنبع المحدث في فرع الموضوع.
#
# سيتم تجاهل الأسطر التي تبدأ بـ "#" ، وسيتم إحباط رسالة فارغة
# ارتكاب.

تحتوي هذه الرسالة على معلومات مهمة بالنسبة لنا ، وهي الشرط


  b[n] = e5c5446967599065dc02a269d8fcfc2c1d3c4f65 

حيث يوجد الفرع الرئيسي لمستودع التحكم عن بعد / build-system.git قبل " التحميل " إلى الفرع الرئيسي لمستودع النظام الأساسي .


بالطبع ، ليس من الملائم جدًا تنفيذ رسالة الالتزام يدويًا عند تشغيل الأمر git-subtree-pull ، ومع ذلك ، هناك طريقة أخرى لتمرير الحالة إلينا


  b[n] = e5c5446967599065dc02a269d8fcfc2c1d3c4f65 

الأداة المساعدة git-subtree (1) ، في هذه الحالة ، ببساطة غير موجودة.


إذا استخدمنا عنصر التحكم -m


  git subtree pill -m "Our own message" ... 

عندها سنفقد قيمة الدولة b [n] ، ولن يكون تعليقنا غنيًا بالمعلومات ، وبالتالي فهو عديم الفائدة تمامًا.


وتجدر الإشارة إلى أنه بعد انتقال حالة الفرع الرئيسي لمستودع نظام البناء من نقطة التحميل الأصلية 47905bcb80be6f7cb3030513986fad4df548f812 ، سوف نتلقى دائمًا إشعارًا بالتغييرات في remote / build-system.git أثناء عرض قائمة الأقسام الفرعية المتصلة. بمعنى آخر ، استخدام الخيار -d في أمر:


  git subtree -d --list 

ستؤدي دائمًا إلى رسالة مشابهة لما يلي:


 bash-4.4$ bash-4.4$ git subtree -d --list Looking for externals... Commit: 47905bcb80be6f7cb3030513986fad4df548f812 build-system ../../remote/build-system.git/ branch master HEAD The 'build-system' subtree seems not updated: original revision: 783c6d5af1100e9665f930c818c861ff011bed19 remote revision: e5c5446967599065dc02a269d8fcfc2c1d3c4f65 You can update 'build-system' subtree by following command: git subtree pull --prefix=build-system ../../remote/build-system.git/ master bash-4.4$ 

سيحدث هذا لأن جميع المعلومات حول الشجرة الفرعية المتصلة موجودة في الرسالة التي رافقت التزام 47905bcb80be6f7cb3030513986fad4df548f812 :


 bash-4.4$ bash-4.4$ git show 47905bcb80be6f7cb3030513986fad4df548f812 commit 47905bcb80be6f7cb3030513986fad4df548f812 Merge: 7fad4be 783c6d5 Author: user <___@_______> Date: Thu Nov 1 20:20:20 2018 +0300 Add 'build-system/' from commit '783c6d5af1100e9665f930c818c861ff011bed19' git-subtree-dir: build-system git-subtree-mainline: 7fad4becbd13258216fb95cbe9d987dd33f0be6d git-subtree-split: 783c6d5af1100e9665f930c818c861ff011bed19 git-subtree-repo: ../../remote/build-system.git/ git-subtree-ref: master diff --cc build-system/README index 0000000,0000000..73a41c7 new file mode 100644 --- /dev/null +++ b/build-system/README @@@ -1,0 -1,0 +1,3 @@@ ++ ++[master] build-system 1.0.0 ++ bash-4.4$ 

ولا يوجد مستودع آخر لهذه المعلومات.


الشيء الوحيد هو أنه الآن بعد كل تحديث للفرع الرئيسي لمستودع التحكم عن بعد / build-system.git ، على جانب المنصة ، عند تنفيذ الأمر


  git subtree -d --list 

سيتم تغيير قيمة السلسلة فقط


  remote revision: e5c5446967599065dc02a269d8fcfc2c1d3c4f65 

وسنحتاج نحن أنفسنا إلى اتخاذ قرارات بشأن ما إذا كنا بحاجة إلى تغييرات جديدة للشجرة الفرعية لنظام البناء أو ، في الوقت الحالي ، ليست هناك حاجة.


ومع ذلك ، لن يكون من الصعب علينا تنفيذ أمر السحب بقدر ما نحتاج إليه ، لأنه إذا لم يكن مستودع التحكم عن بعد / build-system.git تغييرات فعلية ، فإن الأمر:


  git subtree pull --prefix=build-system ../../remote/build-system.git/ master 

سيعطي رسالة كافية:


 bash-4.4$ bash-4.4$ git subtree pull --prefix=build-system ../../remote/build-system.git/ master From ../../remote/build-system * branch master -> FETCH_HEAD Already up to date. bash-4.4$ 


الحصول على رمز من قبل المستخدمين


الآن يمكن لجميع مستخدمي جهاز التحكم عن بعد الخاص بالمستودع الرئيسي / platform.git الحصول على شجرة مصدر تمت تهيئتها بالكامل باستخدام أمر git-pull (1) واحد :


 bash-4.4$ bash-4.4$ cd user/platform/ bash-4.4$ bash-4.4$ git pull remote: Enumerating objects: 15, done. remote: Counting objects: 100% (15/15), done. remote: Compressing objects: 100% (8/8), done. remote: Total 13 (delta 0), reused 0 (delta 0) Unpacking objects: 100% (13/13), done. From ../../remote/platform 7fad4be..ea52eab master -> origin/master Updating 7fad4be..ea52eab Fast-forward README | 2 +- build-system/README | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) create mode 100644 build-system/README bash-4.4$ 

بالإضافة إلى ذلك ، سيتمكن المستخدمون من تتبع تاريخ التطوير ليس فقط في المستودع الرئيسي للمشروع ، ولكن أيضًا من جميع محتوياته الفرعية:


 bash-4.4$ bash-4.4$ git log -3 --graph * commit ea52eabd5910159efabd80adcf522f22bf6a2af2 (HEAD -> master, origin/master, origin/HEAD) |\ Merge: 442c9e9 e5c5446 | | Author: user <___@_______> | | Date: Thu Nov 1 20:48:05 2018 +0300 | | | | Pull changes from master of upstream build-system.git repository. | | | | Merge commit 'e5c5446967599065dc02a269d8fcfc2c1d3c4f65' | | | * commit e5c5446967599065dc02a269d8fcfc2c1d3c4f65 | | Author: user <___@_______> | | Date: Thu Nov 1 20:26:52 2018 +0300 | | | | update build-system version to 1.0.1 | | * | commit 442c9e94c9890032fb2f3123661345d465e2849f | | Author: user <___@_______> | | Date: Thu Nov 1 20:41:40 2018 +0300 | | | | update platform version to 1.0.1 bash-4.4$ 


تسليم التغييرات الشجرة الفرعية إلى مستودع المنبع


تذكر حالة الملفات ، بالإضافة إلى مستودع النظام الأساسي نفسه:


 bash-4.4$ bash-4.4$ git log -3 --graph * commit ea52eabd5910159efabd80adcf522f22bf6a2af2 (HEAD -> master, origin/master, origin/HEAD) |\ Merge: 442c9e9 e5c5446 | | Author: user <___@_______> | | Date: Thu Nov 1 20:48:05 2018 +0300 | | | | Pull changes from master of upstream build-system.git repository. | | | | Merge commit 'e5c5446967599065dc02a269d8fcfc2c1d3c4f65' | | | * commit e5c5446967599065dc02a269d8fcfc2c1d3c4f65 | | Author: user <___@_______> | | Date: Thu Nov 1 20:26:52 2018 +0300 | | | | update build-system version to 1.0.1 | | * | commit 442c9e94c9890032fb2f3123661345d465e2849f | | Author: user <___@_______> | | Date: Thu Nov 1 20:41:40 2018 +0300 | | | | update platform version to 1.0.1 bash-4.4$ 

سنقوم بإجراء تغييرات على الشجرة الفرعية لنظام البناء . للقيام بذلك ، قم بتحرير الملف platform / build-system / README :


 bash-4.4$ bash-4.4$ cd owner/platform/ bash-4.4$ bash-4.4$ vim build-system/README bash-4.4$ cat build-system/README [master] build-system 1.0.2 bash-4.4$ bash-4.4$ git add build-system/README bash-4.4$ git commit -m "build-system is updated to version 1.0.2 from platform side" [master abaa2c5] build-system is updated to version 1.0.2 from platform side 1 file changed, 1 insertion(+), 1 deletion(-) bash-4.4$ 

لكننا لن نسجل هذه التغييرات في مستودع المنصة / الأصل. أي أننا لن ننفذ أمر git-push (1) ، ولكننا سنقوم بتشغيل git-subtree-push مباشرة في أصل مستودع التحكم عن بعد / build-system.git :


 bash-4.4$ bash-4.4$ git subtree push --prefix=build-system ../../remote/build-system.git/ master git push using: ../../remote/build-system.git/ master Enumerating objects: 5, done. Counting objects: 100% (5/5), done. Writing objects: 100% (3/3), 290 bytes | 290.00 KiB/s, done. Total 3 (delta 0), reused 0 (delta 0) To ../../remote/build-system.git/ e5c5446..0673142 0673142942ccf53514a276e855a98514952bb713 -> master bash-4.4$ 

قم بالتمرير خلال الشجرة الفرعية وتأكد من أن الفروع الرئيسية HEAD لمستودع التحكم عن بعد / build-system.git الأصلي تمضي قدمًا:


 bash-4.4$ bash-4.4$ git subtree -d --list Looking for externals... Commit: 47905bcb80be6f7cb3030513986fad4df548f812 build-system ../../remote/build-system.git/ branch master HEAD The 'build-system' subtree seems not updated: original revision: 783c6d5af1100e9665f930c818c861ff011bed19 remote revision: 0673142942ccf53514a276e855a98514952bb713 You can update 'build-system' subtree by following command: git subtree pull --prefix=build-system ../../remote/build-system.git/ master bash-4.4$ 

بالإضافة إلى ذلك ، دعنا نلقي نظرة على حالة النسخة المحلية من مستودع النظام الأساسي ، وتذكر أن الالتزام الأخير لم يتم تحديده من قبلنا في مستودع المنبع:


 bash-4.4$ bash-4.4$ git log -4 --graph * commit abaa2c5edd49dd0cf395c99877b4711d0170af37 (HEAD -> master) | Author: user <___@_______> | Date: Thu Nov 1 21:48:40 2018 +0300 | | build-system is updated to version 1.0.2 from platform side | * commit ea52eabd5910159efabd80adcf522f22bf6a2af2 (origin/master) |\ Merge: 442c9e9 e5c5446 | | Author: user <___@_______> | | Date: Thu Nov 1 20:48:05 2018 +0300 | | | | Pull changes from master of upstream build-system.git repository. | | | | Merge commit 'e5c5446967599065dc02a269d8fcfc2c1d3c4f65' | | | * commit e5c5446967599065dc02a269d8fcfc2c1d3c4f65 | | Author: user <___@_______> | | Date: Thu Nov 1 20:26:52 2018 +0300 | | | | update build-system version to 1.0.1 | | * | commit 442c9e94c9890032fb2f3123661345d465e2849f | | Author: user <___@_______> | | Date: Thu Nov 1 20:41:40 2018 +0300 | | | | update platform version to 1.0.1 bash-4.4$ 

الطريقة الصحيحة لإدخال التغييرات على المستودع الرئيسي للمشروع الرئيسي هي التأكد من أن جميع تغييرات الشجرة الفرعية الخاصة بنا لا تذهب مباشرة إلى المستودع الرئيسي ، ولكنها تأتي من المستودع الرئيسي للشجرة الفرعية كما لو كنا نتلقىها باستخدام الأمر git-subtree-pull . بعد ذلك ، سنشرح معنى أفعالنا ، والآن ، لتجنب المشاكل اللاحقة ، سنعيد الالتزام الأخير ( abaa2c5edd49dd0cf395c99877b4711d0170af37 ) إلى نسخة محلية من مستودع النظام الأساسي :


 bash-4.4$ bash-4.4$ git reset --hard HEAD^ HEAD is now at ea52eab Pull changes from master of upstream build-system.git repository. bash-4.4$ 

ثم "إزالة" الالتزام نفسه مرة أخرى ، ولكن من المستودع الأصلي البعيد / build-system.git upstream. ولكن أولاً ، تأكد من أننا أزلنا آخر التزام abaa2c5edd49dd0cf395c99877b4711d0170af37 :


 bash-4.4$ bash-4.4$ git log -3 --graph * commit ea52eabd5910159efabd80adcf522f22bf6a2af2 (HEAD -> master, origin/master) |\ Merge: 442c9e9 e5c5446 | | Author: user <___@_______> | | Date: Thu Nov 1 20:48:05 2018 +0300 | | | | Pull changes from master of upstream build-system.git repository. | | | | Merge commit 'e5c5446967599065dc02a269d8fcfc2c1d3c4f65' | | | * commit e5c5446967599065dc02a269d8fcfc2c1d3c4f65 | | Author: user <___@_______> | | Date: Thu Nov 1 20:26:52 2018 +0300 | | | | update build-system version to 1.0.1 | | * | commit 442c9e94c9890032fb2f3123661345d465e2849f | | Author: user <___@_______> | | Date: Thu Nov 1 20:41:40 2018 +0300 | | | | update platform version to 1.0.1 bash-4.4$ 

, ea52eabd5910159efabd80adcf522f22bf6a2af2 , remote/build-system.git . , , git-subtree-pull :


 bash-4.4$ bash-4.4$ git subtree pull --prefix=build-system ../../remote/build-system.git/ master From ../../remote/build-system * branch master -> FETCH_HEAD hint: Waiting for your editor to close the file... 

, :


Merge commit '0673142942ccf53514a276e855a98514952bb713'

# Please enter a commit message to explain why this merge is necessary,
# especially if it merges an updated upstream into a topic branch.
#
# Lines starting with '#' will be ignored, and an empty message aborts
# the commit.

:


Pull changes from master of origin remote/build-system repository.

Merge commit '0673142942ccf53514a276e855a98514952bb713'

, , :


 Merge made by the 'recursive' strategy. build-system/README | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) bash-4.4$ 

, , remote/build-system.git - . , build-system platform , remote/build-system.git :


 bash-4.4$ bash-4.4$ git log --graph * commit 04a13bac91d1c445994ffc19db8b479d5e644e17 (HEAD -> master) |\ Merge: ea52eab 0673142 | | Author: user <___@_______> | | Date: Thu Nov 1 21:59:45 2018 +0300 | | | | Pull changes from master of origin remote/build-system repository. | | | | Merge commit '0673142942ccf53514a276e855a98514952bb713' | | | * commit 0673142942ccf53514a276e855a98514952bb713 | | Author: user <___@_______> | | Date: Thu Nov 1 21:48:40 2018 +0300 | | | | build-system is updated to version 1.0.2 from platform side | | * | commit ea52eabd5910159efabd80adcf522f22bf6a2af2 (origin/master) |\ \ Merge: 442c9e9 e5c5446 | |/ Author: user <___@_______> | | Date: Thu Nov 1 20:48:05 2018 +0300 | | | | Pull changes from master of upstream build-system.git repository. | | | | Merge commit 'e5c5446967599065dc02a269d8fcfc2c1d3c4f65' | | | * commit e5c5446967599065dc02a269d8fcfc2c1d3c4f65 | | Author: user <___@_______> | | Date: Thu Nov 1 20:26:52 2018 +0300 | | | | update build-system version to 1.0.1 | | * | commit 442c9e94c9890032fb2f3123661345d465e2849f | | Author: user <___@_______> | | Date: Thu Nov 1 20:41:40 2018 +0300 | | | | update platform version to 1.0.1 | | * | commit 47905bcb80be6f7cb3030513986fad4df548f812 |\ \ Merge: 7fad4be 783c6d5 | |/ Author: user <___@_______> | | Date: Thu Nov 1 20:20:20 2018 +0300 | | | | Add 'build-system/' from commit '783c6d5af1100e9665f930c818c861ff011bed19' | | | | git-subtree-dir: build-system | | git-subtree-mainline: 7fad4becbd13258216fb95cbe9d987dd33f0be6d | | git-subtree-split: 783c6d5af1100e9665f930c818c861ff011bed19 | | git-subtree-repo: ../../remote/build-system.git/ | | git-subtree-ref: master | | | * commit 783c6d5af1100e9665f930c818c861ff011bed19 | Author: user <___@_______> | Date: Thu Nov 1 20:16:33 2018 +0300 | | init build-system master 1.0.0 | * commit 7fad4becbd13258216fb95cbe9d987dd33f0be6d Author: user <___@_______> Date: Thu Nov 1 20:16:33 2018 +0300 init platform master 1.0.0 bash-4.4$ 

, , upstream- remote/platform.git .


 bash-4.4$ bash-4.4$ git status On branch master Your branch is ahead of 'origin/master' by 2 commits. (use "git push" to publish your local commits) nothing to commit, working tree clean bash-4.4$ bash-4.4$ git push Enumerating objects: 9, done. Counting objects: 100% (8/8), done. Delta compression using up to 4 threads Compressing objects: 100% (3/3), done. Writing objects: 100% (5/5), 600 bytes | 600.00 KiB/s, done. Total 5 (delta 0), reused 0 (delta 0) To ../../remote/platform.git ea52eab..04a13ba master -> master bash-4.4$ 

, git-subtree-pull , . , git-push(1) , , , .


, upstream- remote/platform.git 04a13bac91d1c445994ffc19db8b479d5e644e17 , remote/build-system.git , , git-subtree-pull , upstream- remote/platform.git , upstream- remote/platform.git (owner/platform).



git-format-patch


, , git-subtre ,
:


  git log -- . ":(exclude)build-system" git log -- build-system 

, , .


git-format-patch .


, , patch- ea52eabd5910159efabd80adcf522f22bf6a2af2 , git-format-patch :


 bash-4.4$ bash-4.4$ git format-patch ea52eabd5910159efabd80adcf522f22bf6a2af2 --stdout From 0673142942ccf53514a276e855a98514952bb713 Mon Sep 17 00:00:00 2001 From: user <___@_______> Date: Thu, 1 Nov 2018 21:48:40 +0300 Subject: [PATCH] build-system is updated to version 1.0.2 from platform side --- README | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README b/README index 629b3f4..4fbbbaf 100644 --- a/README +++ b/README @@ -1,3 +1,3 @@ -[master] build-system 1.0.1 +[master] build-system 1.0.2 -- 2.19.1 bash-4.4$ 

, build-system/README build-system/, :


 --- a/README +++ b/README 

,
git-diff :


 bash-4.4$ bash-4.4$ git diff ea52eabd5910159efabd80adcf522f22bf6a2af2 04a13bac91d1c445994ffc19db8b479d5e644e17 diff --git a/build-system/README b/build-system/README index 629b3f4..4fbbbaf 100644 --- a/build-system/README +++ b/build-system/README @@ -1,3 +1,3 @@ -[master] build-system 1.0.1 +[master] build-system 1.0.2 bash-4.4$ 

patch-:


 --- a/build-system/README +++ b/build-system/README 

git-diff(1) , , , platform .



سياسيون


CM- , . , , :


  • upstream- ;
  • upstream-, .

, .


, , upstream- remote/build-system.git :


 bash-4.4$ bash-4.4$ cd owner/build-system/ bash-4.4$ cat README [master] build-system 1.0.2 bash-4.4$ 

, upstream- remote/build-system.git , , , minor 1.0.2 . build-system-1.1.x , , : 1.1.0 , 1.1.1 , 1.1.2 , .


:


 bash-4.4$ bash-4.4$ git checkout -b build-system-1.1.x Switched to a new branch 'build-system-1.1.x' bash-4.4$ git branch * build-system-1.1.x master bash-4.4$ 

, README 1.1.0 :


 bash-4.4$ bash-4.4$ vim README bash-4.4$ cat README [master] build-system 1.1.0 bash-4.4$ bash-4.4$ git commit -a -m "Move on to developing 1.1.x functionality" [build-system-1.1.x f6d79c1] Move on to developing 1.1.x functionality 1 file changed, 1 insertion(+), 1 deletion(-) bash-4.4$ 

upstream- remote/build-system.git :


 bash-4.4$ bash-4.4$ git push --set-upstream origin build-system-1.1.x Enumerating objects: 5, done. Counting objects: 100% (5/5), done. Writing objects: 100% (3/3), 280 bytes | 280.00 KiB/s, done. Total 3 (delta 0), reused 0 (delta 0) To ../../remote/build-system.git * [new branch] build-system-1.1.x -> build-system-1.1.x Branch 'build-system-1.1.x' set up to track remote branch 'build-system-1.1.x' from 'origin'. bash-4.4$ 

, , , 1.1.1 :


 bash-4.4$ bash-4.4$ vim README bash-4.4$ cat README [master] build-system 1.1.1 bash-4.4$ bash-4.4$ git commit -a -m "Update build-system version to 1.1.1" [build-system-1.1.x f9544a4] Update build-system version to 1.1.1 1 file changed, 1 insertion(+), 1 deletion(-) bash-4.4$ bash-4.4$ git push Enumerating objects: 5, done. Counting objects: 100% (5/5), done. Writing objects: 100% (3/3), 276 bytes | 276.00 KiB/s, done. Total 3 (delta 0), reused 0 (delta 0) To ../../remote/build-system.git f6d79c1..f9544a4 build-system-1.1.x -> build-system-1.1.x bash-4.4$ 

:


 bash-4.4$ bash-4.4$ git tag -a 1.1.1 -m "Created tag for release (version 1.1.1)" bash-4.4$ git push origin 1.1.1 Enumerating objects: 1, done. Counting objects: 100% (1/1), done. Writing objects: 100% (1/1), 170 bytes | 170.00 KiB/s, done. Total 1 (delta 0), reused 0 (delta 0) To ../../remote/build-system.git * [new tag] 1.1.1 -> 1.1.1 bash-4.4$ 

upstream- remote/build-system.git :


 bash-4.4$ bash-4.4$ cd remote/build-system.git/ bash-4.4$ tree refs refs ├── heads │  ├── build-system-1.1.x │  └── master └── tags └── 1.1.1 2 directories, 3 files bash-4.4$ 

, platform build-system . , , , , platform-1.0.2 :


 bash-4.4$ bash-4.4$ cd user/platform/ bash-4.4$ git branch * master bash-4.4$ git pull Already up to date. bash-4.4$ bash-4.4$ git checkout -b platform-1.0.2 Switched to a new branch 'platform-1.0.2' bash-4.4$ vim README bash-4.4$ cat README [master] platform 1.0.2 bash-4.4$ git commit -a -m "reated platform-1.0.2 branch for the transition to the system 1.1.1" [platform-1.0.2 00a1250] reated platform-1.0.2 branch for the transition to the system 1.1.1 1 file changed, 1 insertion(+), 1 deletion(-) bash-4.4$ 

, , - remote/build-system.git , 1.1.1 :


 bash-4.4$ bash-4.4$ git rm -rf build-system/ rm 'build-system/README' bash-4.4$ git commit -a -m "Removed subtre based on build-system/master" [platform-1.0.2 7db0f54] Removed subtre based on build-system/master 1 file changed, 3 deletions(-) delete mode 100644 build-system/README bash-4.4$ bash-4.4$ bash-4.4$ git push --set-upstream origin platform-1.0.2 Enumerating objects: 7, done. Counting objects: 100% (7/7), done. Delta compression using up to 4 threads Compressing objects: 100% (3/3), done. Writing objects: 100% (5/5), 550 bytes | 550.00 KiB/s, done. Total 5 (delta 0), reused 0 (delta 0) To ../../remote/platform.git/ * [new branch] platform-1.0.2 -> platform-1.0.2 Branch 'platform-1.0.2' set up to track remote branch 'platform-1.0.2' from 'origin'. bash-4.4$ bash-4.4$ bash-4.4$ git subtree add --prefix=build-system ../../remote/build-system.git/ 1.1.1 git fetch ../../remote/build-system.git/ 1.1.1 remote: Enumerating objects: 9, done. remote: Counting objects: 100% (9/9), done. remote: Compressing objects: 100% (3/3), done. remote: Total 7 (delta 0), reused 0 (delta 0) Unpacking objects: 100% (7/7), done. From ../../remote/build-system * tag 1.1.1 -> FETCH_HEAD Added dir 'build-system' bash-4.4$ 

build-system upstream- remote/platform.git :


 bash-4.4$ bash-4.4$ git push Enumerating objects: 12, done. Counting objects: 100% (12/12), done. Delta compression using up to 4 threads Compressing objects: 100% (4/4), done. Writing objects: 100% (8/8), 889 bytes | 889.00 KiB/s, done. Total 8 (delta 0), reused 0 (delta 0) To ../../remote/platform.git/ 7db0f54..6f1a50e platform-1.0.2 -> platform-1.0.2 bash-4.4$ 

:


 bash-4.4$ bash-4.4$ git log -3 --graph * commit 6f1a50e249e01f69c54f343b65747d28abc6456d (HEAD -> platform-1.0.2, origin/platform-1.0.2) |\ Merge: 7db0f54 f9544a4 | | Author: user <___@_______> | | Date: Fri Nov 2 18:24:54 2018 +0300 | | | | Add 'build-system/' from commit 'f045926542e9f685034545a45317093383fddf99' | | | | git-subtree-dir: build-system | | git-subtree-mainline: 7db0f5452e67086dc4e381a0ccb14f25d48ecf0b | | git-subtree-split: f045926542e9f685034545a45317093383fddf99 | | git-subtree-repo: ../../remote/build-system.git/ | | git-subtree-ref: 1.1.1 | | | * commit f9544a4cc2650a83b96f400fdfc95ba64a38ec6e | | Author: user <___@_______> | | Date: Fri Nov 2 17:59:43 2018 +0300 | | | | Update build-system version to 1.1.1 | | | * commit f6d79c12ada29438454739fe6f6db9592d413be2 | | Author: user <___@_______> | | Date: Fri Nov 2 17:54:35 2018 +0300 | | | | Move on to developing 1.1.x functionality bash-4.4$ 

, CM- , platform , platform-1.0.2 build-system . , , build-system , .


, upstream- build-system platform , pre-receive


  remote/build-system.git/hooks/pre-receive 

, , :


 #!/bin/sh zero_commit="0000000000000000000000000000000000000000" LC_COLLATE='C' allowed_users=(habr habrahabr) while read oldrev newrev refname; do # # git-subtree(1) push       , #    .      # : # # 1)       ,   ,  # 2)         tag,    #       ,  , , #  'refs/tags/1.1.1',  '1.1.1',  git-subtree(1) #       'refs/heads/1.1.1', #     . # : if [[ $oldrev == $zero_commit && $refname =~ ^refs/heads/ ]]; then refbase=$(basename $refname) refpath=$(git show-ref $refbase | cut -f2 -d' ') if [[ $refpath =~ ^refs/tags/.*$ ]]; then echo "" echo "ERROR: Trying to change TAG named as '$refpath'." echo "" exit 1 fi if [[ ! ${allowed_users[*]} =~ $USER ]]; then echo "" echo "ERROR: Trying to create NEW BRANCH with name '$refname'." echo "" exit 1 fi fi done exit 0 

. , , , , , , . , , :


  git subtree push --prefix=<subdir> <remote> <ref> 

<ref> , <subdir> , , (refs/tags/1.1.1), (1.1.1) upstream- ( : refs/heads/1.1.1).


, git-subtree(1) . .


, pre-receive , user/platform/build-system/README:


 bash-4.4$ bash-4.4$ cd user/platform/ bash-4.4$ vim build-system/README bash-4.4$ cat build-system/README [master] build-system 1.1.1 Try to change. bash-4.4$ bash-4.4$ git commit -a -m "Try to change the tag of build-system" [platform-1.0.2 34e7970] Try to change the tag of build-system 1 file changed, 2 insertions(+) bash-4.4$ 

upstream- remote/build-system.git .


...

upstream-


  git subtree push --prefix=<subdir> <remote> <ref> 

, , , :


 bash-4.4$ git subtree -d --list Looking for externals... Commit: 6f1a50e249e01f69c54f343b65747d28abc6456d build-system ../../remote/build-system.git/ tag 1.1.1 f045926542e9f685034545a45317093383fddf99 bash-4.4$ 

, , upstream- remote/build-system.git :




 bash-4.4$ bash-4.4$ git subtree push --prefix=build-system ../../remote/build-system.git/ 1.1.1 git push using: ../../remote/build-system.git/ 1.1.1 Enumerating objects: 5, done. Counting objects: 100% (5/5), done. Writing objects: 100% (3/3), 293 bytes | 293.00 KiB/s, done. Total 3 (delta 0), reused 0 (delta 0) remote: remote: ERROR: Trying to change TAG named as 'refs/tags/1.1.1'. remote: To ../../remote/build-system.git/ ! [remote rejected] c3a7333aaa818a7d7a0d501d4b69db1c6a01d40f -> 1.1.1 (pre-receive hook declined) error: failed to push some refs to '../../remote/build-system.git/' bash-4.4$ 

, , pre-receive , . :


 remote: remote: ERROR: Trying to change TAG named as 'refs/tags/1.1.1'. remote: 

, , , , :


 bash-4.4$ bash-4.4$ git reset --hard HEAD^ HEAD is now at 6f1a50e Add 'build-system/' from commit 'f045926542e9f685034545a45317093383fddf99' bash-4.4$ 

, , platform-1.0.2 :


 bash-4.4$ bash-4.4$ git log -3 --graph * commit 6f1a50e249e01f69c54f343b65747d28abc6456d (HEAD -> platform-1.0.2, origin/platform-1.0.2) |\ Merge: 7db0f54 f9544a4 | | Author: user <___@_______> | | Date: Fri Nov 2 18:24:54 2018 +0300 | | | | Add 'build-system/' from commit 'f045926542e9f685034545a45317093383fddf99' | | | | git-subtree-dir: build-system | | git-subtree-mainline: 7db0f5452e67086dc4e381a0ccb14f25d48ecf0b | | git-subtree-split: f045926542e9f685034545a45317093383fddf99 | | git-subtree-repo: ../../remote/build-system.git/ | | git-subtree-ref: 1.1.1 | | | * commit f9544a4cc2650a83b96f400fdfc95ba64a38ec6e | | Author: user <___@_______> | | Date: Fri Nov 2 17:59:43 2018 +0300 | | | | Update build-system version to 1.1.1 | | | * commit f6d79c12ada29438454739fe6f6db9592d413be2 | | Author: user <___@_______> | | Date: Fri Nov 2 17:54:35 2018 +0300 | | | | Move on to developing 1.1.x functionality bash-4.4$ 



git-subrepo , , squashed-, git-subtree(1) , .


, . git-subrepo . , git-subtree , , Git , , , Git .



:


Source: https://habr.com/ru/post/ar429014/


All Articles