直到今天我都在使用 SVN,所以我对 git 的高级功能不是很熟悉。
我想克隆一个包含我在项目中使用的一些文件的存储库。我的项目在它自己的存储库中,所以当我提交文件时,它们会放在我的项目下。如果我更改它们,它们也会在我的项目中提交。
但是,我希望它们被视为对我从中获取的存储库的拉取请求。
在 SVN 中,我为此使用了 svn-externals。我怎样才能在 git 中做到这一点,所以它很容易?
你可以使用git submodule
它。
最新版本的 git 现在允许 git 子模块跟踪子模块 repo 的最新提交。
Git1.8.2:
"
git submodule
" 开始学习一种与远程分支的尖端集成的新模式(而不是与超级项目的 gitlink 中记录的提交集成)。
# add submodule to track master branch
git submodule add -b master [URL to Git repo];
# update your submodule
git submodule update --remote
从手册页:
--remote
此选项仅对
update
命令有效。
不要使用超级项目记录的 SHA-1 来更新子模块,而是使用子模块的远程跟踪分支的状态。
这接近于svn external
通常的行为。
还有子树。
我在子树中发现子模块的主要优点是可以修改文件夹中的内容并将其从同一个父仓库推回上游,尽管在子树中正确推送文件的命令是不同的(git subtree push -P ... )
此外,克隆父 repo 的其他人无需自己处理子树命令即可获得所有内容。我认为对于子模块,每个人都需要单独设置和管理它们。