强制Git子模块始终保持最新

fwzugrvs  于 2023-01-19  发布在  Git
关注(0)|答案(4)|浏览(209)

我喜欢git子模块。我也讨厌git子模块。我喜欢的是它如何让你干净地划分依赖关系等。我明白让它们指向一个repo上的特定提交,我明白。但在我的例子中,我正在构建一个库,将在另一个项目中使用,所以我想把它放在那个单独的repo中。
然而,当我每天都在这个库上工作时,我经常不得不切换回使用我的库来提交指针更新的应用程序,这让我很烦恼。
那么,有没有可能让一个git子模块一直在它所指向的repo的头上,同时我不断地更新和添加这个库呢?

kmbjn2e3

kmbjn2e31#

正如我在“git submodule tracking latest“中提到的,从git 1.8.2(March 2013)开始,你可以让一个子模块跟踪分支的HEAD:

git submodule add -b <branch> <repository> [<path>]

子模块SHA1在父存储库中仍记录为**gitlink**(special entry in the index
但是git submodule update --remote会将该条目更新到SHA1,以匹配子模块remote repo的分支HEAD。
如果已有子模块you can make it follow a branch,则:

cd /path/to/your/parent/repo
git config -f .gitmodules submodule.<path>.branch <branch>

cd path/to/your/submodule
git checkout -b <branch> --track origin/<branch>
  # if the master branch already exist:
  git branch -u origin/<branch> <branch>

cd /path/to/your/parent/repo
git add path/to/your/submodule
git commit -m "Make submodule tracking <branch>"
wvmv3b1j

wvmv3b1j2#

更新:从git 1.8.2开始,似乎有了一个解决方案,请看VonC's answer down below。原始答案在这里留给git〈1.8.2的用户。
不,这是设计的。如果有一种方法可以将子模块指向其他仓库的“当前head”,那么就不可能从主仓库中检索历史版本(例如标记版本)。它不知道该 checkout 子模块的哪个版本。
话虽如此,你可能会对git subtree脚本感兴趣,它提供了一种不同的处理子模块的方式,可能更适合你的工作流,最近的post on HN提醒了我这一点。

ssm49v7z

ssm49v7z3#

为什么不在submodule目录中进行修改呢?submodule目录本身就是一个git repo,这样你的应用就可以一直更新库。
注意事项:
1.您仍然需要在应用存储库中提交子模块更改,以便将更改置于版本控制中(针对应用)。
1.如果有多个应用程序正在使用此库,则此操作将不起作用,因为在任何给定时间只有一个应用程序是最新的。

nvbavucw

nvbavucw4#

目前还没有这样的东西。为了保持代码是最新的,我使用了以下命令:
下载全部为这第一次:git clone --recursive http://github.com/<your repo>
在现有存储库中下载更新:git submodule update --remote --recursive --merge

相关问题