我喜欢git子模块。我也讨厌git子模块。我喜欢的是它如何让你干净地划分依赖关系等。我明白让它们指向一个repo上的特定提交,我明白。但在我的例子中,我正在构建一个库,将在另一个项目中使用,所以我想把它放在那个单独的repo中。然而,当我每天都在这个库上工作时,我经常不得不切换回使用我的库来提交指针更新的应用程序,这让我很烦恼。那么,有没有可能让一个git子模块一直在它所指向的repo的头上,同时我不断地更新和添加这个库呢?
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,则:
git submodule update --remote
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>"
wvmv3b1j2#
更新:从git 1.8.2开始,似乎有了一个解决方案,请看VonC's answer down below。原始答案在这里留给git〈1.8.2的用户。不,这是设计的。如果有一种方法可以将子模块指向其他仓库的“当前head”,那么就不可能从主仓库中检索历史版本(例如标记版本)。它不知道该 checkout 子模块的哪个版本。话虽如此,你可能会对git subtree脚本感兴趣,它提供了一种不同的处理子模块的方式,可能更适合你的工作流,最近的post on HN提醒了我这一点。
ssm49v7z3#
为什么不在submodule目录中进行修改呢?submodule目录本身就是一个git repo,这样你的应用就可以一直更新库。注意事项:1.您仍然需要在应用存储库中提交子模块更改,以便将更改置于版本控制中(针对应用)。1.如果有多个应用程序正在使用此库,则此操作将不起作用,因为在任何给定时间只有一个应用程序是最新的。
nvbavucw4#
目前还没有这样的东西。为了保持代码是最新的,我使用了以下命令:下载全部为这第一次:git clone --recursive http://github.com/<your repo>在现有存储库中下载更新:git submodule update --remote --recursive --merge
git clone --recursive http://github.com/<your repo>
git submodule update --remote --recursive --merge
4条答案
按热度按时间kmbjn2e31#
正如我在“git submodule tracking latest“中提到的,从git 1.8.2(March 2013)开始,你可以让一个子模块跟踪分支的HEAD:
子模块SHA1在父存储库中仍记录为**gitlink**(special entry in the index)
但是
git submodule update --remote
会将该条目更新到SHA1,以匹配子模块remote repo的分支HEAD。如果已有子模块you can make it follow a branch,则:
wvmv3b1j2#
更新:从git 1.8.2开始,似乎有了一个解决方案,请看VonC's answer down below。原始答案在这里留给git〈1.8.2的用户。
不,这是设计的。如果有一种方法可以将子模块指向其他仓库的“当前head”,那么就不可能从主仓库中检索历史版本(例如标记版本)。它不知道该 checkout 子模块的哪个版本。
话虽如此,你可能会对git subtree脚本感兴趣,它提供了一种不同的处理子模块的方式,可能更适合你的工作流,最近的post on HN提醒了我这一点。
ssm49v7z3#
为什么不在submodule目录中进行修改呢?submodule目录本身就是一个git repo,这样你的应用就可以一直更新库。
注意事项:
1.您仍然需要在应用存储库中提交子模块更改,以便将更改置于版本控制中(针对应用)。
1.如果有多个应用程序正在使用此库,则此操作将不起作用,因为在任何给定时间只有一个应用程序是最新的。
nvbavucw4#
目前还没有这样的东西。为了保持代码是最新的,我使用了以下命令:
下载全部为这第一次:
git clone --recursive http://github.com/<your repo>
在现有存储库中下载更新:
git submodule update --remote --recursive --merge