当我们构建我们的应用程序时,我们首先从 CVS 存储库的目录中获取代码,然后构建它。所以在 Git 中,我们有什么类似的东西可以做吗?我只想从 Git repo 的特定目录中签出,然后构建我们的代码。没有本地回购维护,什么都没有。只需代码结帐。
我知道有一种叫做“稀疏结帐”的东西。我们有更简单的吗?
我的问题是这个构建脚本可以在任何服务器上运行。因此,如果我选择稀疏结帐,我将不得不在每台服务器上设置 Git,并告诉它如何进行稀疏结帐。
当我们构建我们的应用程序时,我们首先从 CVS 存储库的目录中获取代码,然后构建它。所以在 Git 中,我们有什么类似的东西可以做吗?我只想从 Git repo 的特定目录中签出,然后构建我们的代码。没有本地回购维护,什么都没有。只需代码结帐。
我知道有一种叫做“稀疏结帐”的东西。我们有更简单的吗?
我的问题是这个构建脚本可以在任何服务器上运行。因此,如果我选择稀疏结帐,我将不得不在每台服务器上设置 Git,并告诉它如何进行稀疏结帐。
要逐字回答您的问题,您必须执行以下操作:
在临时目录中检索 repo 数据
mkdir path/to/temporary && cd path/to/temporary
git clone <repo-url> --depth 1 --bare
并在另一个目录中签出您想要的目录
git --work-tree=/path/to/checkout checkout HEAD -- sub/directory
然后,您可以删除临时文件并使用结帐。
当然,这可以很容易地放入脚本中!
Git 哲学与 CVS 相差甚远,所以我建议你在这里采取不同的行动。您的 Git 存储库将被分发,每个开发人员或服务器都将拥有它的副本,其中一个是权威的(origin
在 Git 术语中是远程的)。
当你想从一个新的 checkout 开始构建时,你首先说 Git 从 获取最新的更改origin
,这称为 fetch。
git fetch origin
然后,要重新签出,您希望您的文件系统与服务器版本完全相同,没有任何其他文件。
git checkout --force origin/master
git clean -d --force
这里的优点是网络操作非常高效,您只从要同步的服务器中获取最新的差异,并且您仍然可以确定您是从正确的文件构建的,而不会更改它们。
您还需要检查用于持续集成的工具,例如 Jenkins,它与 Git 存储库集成得非常好。
您可以尝试使用该--depth
选项克隆您的存储库,看看它是否符合您的需要。--depth 选项不会克隆完整的存储库历史记录,因此会更快。
> git clone http://myrepo.git --depth 1
您可以通过指定分支名称来进一步限制结帐:
> git clone http://myrepo.git -b master --depth 1
如果您只想签出 git 存储库的子目录,AFAIK,目前是不可能的。