Von*_*onC 163
如果我希望链接始终指向外部仓库的HEAD怎么办?
您可以使子模块遵循子模块远程仓库的分支的HEAD,具有:
o git submodule add -b <branch> <repository> [<path>].(指定要遵循的分支)
o 默认情况下git submodule update --remote将子模块的内容更新为最新的HEAD .即使使用,您的主项目仍将跟踪子模块的HEAD的哈希值.<repository>/<branch>origin/master--remote
Nik*_*s P 108
概念上的区别是:
使用git子模块,您通常希望将大型存储库分成较小的存储库.引用子模块的方式是maven风格 - 您引用来自另一个(子模块)存储库的单个提交.如果您需要在子模块中进行更改,则必须在子模块中进行提交/推送,然后在主存储库中引用新提交,然后提交/推送更改的主存储库引用.这样,您必须能够访问两个存储库以进行完整构建.
使用git子树,您可以在其中集成另一个存储库,包括其历史记录.因此,在集成它之后,存储库的大小可能更大(因此这不是保持存储库更小的策略).集成后,没有与其他存储库的连接,除非您想获得更新,否则不需要访问它.因此,这种策略更适用于代码和历史重用 - 我个人不使用它.
当您想要将嵌入式存储库的提交历史记录与主存储库分开时,Git 子模块非常有用。但是,使用子模块可能很复杂且难以管理,尤其是当您需要更新嵌入式存储库时。
Git 子树是一种解决方案,允许将一个存储库作为子目录合并到另一个存储库中,但保留整个提交历史记录。当您想要在不同项目之间共享一组文件而不需要维护单独的存储库时,它非常有用。使用子树比使用子模块更简单,并且通常更易于管理。
简而言之,如果您需要将共享存储库的提交历史记录与主存储库分开,那么 git 子模块可能是最佳选择。如果您需要在不同项目之间共享一组文件而不需要维护单独的存储库,那么 git subtree 可能是最佳选择。
让我们比较一下发送和接收更新的命令:
1. 子模块
#push updates:
cd path/to/submodule
1. git add .
2. git commit -m "Submodule Update"
3. git push origin master
cd ..
4. git add submodule
5. git commit -m "Submodule ref update"
6. git push origin master
# >Needs to be in this order! Easy to get trouble<
#pull:
git submodule update --remote
Run Code Online (Sandbox Code Playgroud)
2. 子树
#push updates:
cd path/to/shared/repo
1. git add .
2. git commit -m "Subtree update"
3. git push origin master
#then
4. git subtree push --prefix=path/to/shared/repo shared-repo master
#pull:
git subtree pull --prefix=path/to/shared/repo shared-repo master
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
73614 次 |
| 最近记录: |