Gitサブツリヌの詳现

自分のプロゞェクトでこのツヌルたたはそのツヌルを䜿甚するこずを決定する堎合、゚ンゞニアはサポヌト文曞を怜蚎するだけでなく、将来の朜圚的な問題を回避するために䞀連の実隓を実斜する必芁がありたす。 長期的に蚭蚈されたCMポリシヌに぀いお話しおいる堎合、遞択゚ラヌの䟡栌は非垞に高くなりたす。


このペヌパヌの目暙は、 Gitサブツリヌ管理ツヌルを実践するこずです。



リビゞョン1.7.11から、 contrib / subtreeディレクトリのGitアップストリヌムリポゞトリには、 サブツリヌでの䜜業を自動化するツヌルが含たれおいたす 。


git-subtree1サヌビスは、実際にはgit-read-tree1およびgit-write-tree1関数を䜿甚する䟿利なアドオンです。 したがっお、 git-subtree1のリンクはadd / pull / pushコマンドです

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コマンドを䜿甚しお、䞊流のremote / repositoryを参照できたす名前による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の蚘事で説明したすべおのタスクを怜蚎したすが、2぀のツヌルの違いを考慮したす。



サブツリヌを接続する


remote / 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$ 

そしお、アップストリヌムリポゞトリremote / build-system.gitのmasterブランチをbuild-systemディレクトリに接続したす。


 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コマンドが残っおいるずいうメッセヌゞに泚意する必芁がありたす。 実際、このコマンドを䜿甚しお、 プラットフォヌムリポゞトリに違いを入れたした。


 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$ 

さらに、倉曎の履歎がもう少し進んだずきに、サブツリヌの接続の詳现をより詳现に怜蚎し、倉曎をアップストリヌムリポゞトリremote / 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-subtree1addコマンドポストを芋おください


  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コマンドは、メッセヌゞの最埌の2行を远加したせん。 プロゞェクトの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$ 

サンプルをより珟実的にするには、アップストリヌムリポゞトリremote / 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$ 

それらをアップストリヌムのremote / build-system.gitリポゞトリに枡したす 


 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$ 

この状態を芚えお、 remote / 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$ 

䜜業の結果、 remote / 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、リンクの皮類ブランチたたはタグ、リンクの名前、およびサブツリヌにコヌドを配眮したリポゞトリの指定されたブランチたたはタグのリビゞョンを衚瀺したす。 ただし、 ビルドシステムサブプロゞェクトの開発が進んでおり、masterブランチのヘッドを指すこずはもはや有効ではないこずを芚えおいたす。 むしろ、これは私たちのリポゞトリに保存したいものに関するメッセヌゞであり、実際の状況ではありたせん。


サブツリヌのアップストリヌムリポゞトリでコヌドがどれだけ進行したかを調べるには、サブツリヌもスクロヌルする必芁がありたすが、 -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 "commit message"を指定しなかったため、メッセヌゞテキストで゚ディタヌを開きたす。


マヌゞコミット 'e5c5446967599065dc02a269d8fcfc2c1d3c4f65'

コミットメッセヌゞを入力しお、このマヌゞが必芁な理由を説明しおください。
特に、曎新されたアップストリヌムをトピックブランチにマヌゞする堎合。

「」で始たる行は無芖され、空のメッセヌゞは䞭止されたす
コミット。

このテキストをより有益なものに眮き換えたす。


アップストリヌムbuild-system.gitリポゞトリのマスタヌから倉曎をプルしたす。

マヌゞコミット 'e5c5446967599065dc02a269d8fcfc2c1d3c4f65'

このメッセヌゞを保存しお゚ディタヌを閉じるず、次の出力が埗られたす。


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

぀たり、アップストリヌムリポゞトリremote / build-system.gitの倉曎を受け取り、メむンリポゞトリ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$ 

プロゞェクトの他のナヌザヌがこれらの倉曎を取埗できるようにするには、それらをアップストリヌムリポゞトリremote / 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$ 


プラットフォヌムサブツリヌずしお接続された時点でのremote / 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 

プラットフォヌムリポゞトリのmasterブランチに「 アップロヌド 」 する前に、 remote / build-system.gitリポゞトリのmasterブランチが配眮されおいたした 。


もちろん、 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$ 

この情報のリポゞトリは他にありたせん。


唯䞀のこずは、コマンドを実行するずきに、 プラットフォヌム偎でremote / build-system.gitリポゞトリのmasterブランチを曎新するたびに、


  git subtree -d --list 

文字列の倀のみが倉曎されたす


  remote revision: e5c5446967599065dc02a269d8fcfc2c1d3c4f65 

そしお、 ビルドシステムサブツリヌに新しい倉曎が必芁かどうか、たたは珟時点では必芁でないかどうかを刀断する必芁がありたす。


ただし、 リモヌト/ build-system.gitリポゞトリに実際の倉曎がなかった堎合、コマンドは次のようになるため、必芁な頻床でpullコマンドを実行するこずは難しくありたせん。


  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$ 


ナヌザヌによるコヌドの取埗


これで、アップストリヌムリポゞトリremote / 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$ 

ビルドシステムサブツリヌに倉曎を加えたす。 これを行うには、 プラットフォヌム/ 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をremote / 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$ 

サブツリヌをスクロヌルしお、元のremote / build-system.gitリポゞトリのHEADマスタヌブランチが先に進むこずを確認したす 。


 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アップストリヌムリポゞトリから同じコミットを「削陀」したす。 しかし、最初に、最埌のコミット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... 

次に、コミットメッセヌゞを線集するように求められたす。


マヌゞコミット '0673142942ccf53514a276e855a98514952bb713'

コミットメッセヌゞを入力しお、このマヌゞが必芁な理由を説明しおください。
特に、曎新されたアップストリヌムをトピックブランチにマヌゞする堎合。

「」で始たる行は無芖され、空のメッセヌゞは䞭止されたす
コミット。

これに眮き換えたす


オリゞンのマスタヌリモヌト/ビルドシステムリポゞトリから倉曎をプルしたす。

マヌゞコミット '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からの倉曎の重芁なマヌゞを回避したした。 これは、ロヌカルプラットフォヌムリポゞトリのビルドシステムサブツリヌに倉曎を残さず、元の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- 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 .


...

アップストリヌムリポゞトリのリビゞョンぞのリンクは、コマンドの必須パラメヌタヌです


  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$ 

そのため、タグ名を芚えお、最終的にアップストリヌムの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/J429014/


All Articles