我推荐android使用的repo工具。它足够通用,可以与任何 git 托管环境一起使用,并且不需要像子模块那样提交超级项目来更新子项目。
首先,按照此处所述安装客户端:https://source.android.com/source/downloading.html#installing-repo
然后创建一个清单存储库。清单是一个 xml 文件,描述了 git 存储库位置以及应检出它们的路径。像这样:
mkdir manifests
cd manifests
git init
创建清单文件default.xml
:
<?xml version="1.0" encoding="UTF-8"?>
<manifest>
<remote name="github" fetch="ssh://[email protected]" />
<default remote="github" revision="master" />
<project name="git/git.git" path="git" />
<project name="libgit2/libgit2.git" path="vendor/libgit2" />
</manifest>
然后添加、提交清单并推送到某处:
git add default.xml
git commit -m "My first try at a manifest file"
git push [email protected]:myusername/manifests.git master
现在您可以使用repo
命令。
mkdir myproject
cd myproject
repo init -u [email protected]:myusername/manifests.git
repo sync -j2
您的 git 存储库将被克隆。您现在可以像平常一样在每一项中工作。在你推动任何一个项目之后,其他人需要做的就是repo sync
并且它们将更新到最新版本(另请参阅repo start
).
Caveats
您可能需要重新组织您的项目。通常,您可能有其他模块作为子目录(myproject/vendor/dependency
)。虽然您仍然可以使用存储库维护此布局,但它将导致 git 存储库被另一个存储库签出。和.gitignore
欺骗它可能是可行的,但我建议重新组织您的项目,这样存储库就不需要相互检查。
关于清单文件的简短说明
See https://gerrit.googlesource.com/git-repo/+/master/docs/manifest-format.txt有关 xml 文件中每个项目的完整说明。
See https://source.android.com/source/using-repo.html以获得简单的命令参考。repo help
也很有用。注意:你应该忽略repo upload
除非你使用 Gerrit。
<remote name="github" fetch="ssh://[email protected]" />
这就像添加一个遥控器一样git
。这意味着我们可以引用给定名称的 url。
<default remote="github" revision="master" />
default 元素指定项目的默认选项。这相当于添加remote
and revision
每个项目的项目。这只是节省了一些打字时间。
<project name="git/git.git" path="git" />
这才是真正的工作发生的地方。repo sync
将获取名称并使用斜杠将其附加到远程。在这种情况下,远程是默认的github
,所以它会得到urlssh://[email protected]/git/git.git
。它将检出项目到路径git
在指定的修订版(在这种情况下默认是master
)。随后的repo sync
s 将签出最新版本(如果是分支)。