我有几个git存储库,其中包含Linux系统的配置文件。有时我需要将相同的更改应用于所有存储库。我该如何实现自动化?
答案 0 :(得分:2)
您可以将多个遥控器添加到单个git存储库,然后执行任何您想要的操作,包括挑选,然后随意推送任何内容。
例如 - 让我们制作两个存储库(裸机和“工作”存储库来模拟真实场景):
$ git init --bare a
$ git init --bare b
$ git clone a a-work
$ ( cd a-work && echo 'This is repo A' >README.txt && git add README.txt && git commit -am 'First in A' )
$ ( cd a-work && echo 'This is some important file' >important.txt && git add important.txt && git commit -am 'Important file' )
$ ( cd a-work && git push )
$ git clone b b-work
$ ( cd b-work && echo 'This is repo B' >README.txt && git add README.txt && git commit -am 'First in B' )
$ ( cd b-work && git push )
现在你可以添加两个repos作为遥控器,从中获取,cherrypick一些提交并将其推送到任何其他repo:
$ git init both
$ cd both
$ git remote add a ../a
$ git remote add b ../b
$ git fetch --all
$ git log --all --oneline --decorate --graph
* d9225a1 (a/master) Important file
* 2fb3ae7 First in A
* bdeae08 (b/master) First in B
$ git checkout -b b-master b/master
$ git cherry-pick d9225a1
$ git log --all --oneline --decorate --graph
* b338dd3 (HEAD, b-master) Important file
* bdeae08 (b/master) First in B
* d9225a1 (a/master) Important file
* 2fb3ae7 First in A
$ git push b HEAD:master
repo both
中结构的可视化,更好地看到提交在那里不是线性的,因为在那里提取了多个单独的repos:
然后当你回到b-work
:
$ cd ../b-work
$ git pull
$ git log --oneline --graph --decorate --all
* b338dd3 (HEAD, origin/master, master) Important file
* bdeae08 First in B
从回购A中采摘的文件就在那里。