4

当我们构建我们的应用程序时,我们首先从 CVS 存储库的目录中获取代码,然后构建它。所以在 Git 中,我们有什么类似的东西可以做吗?我只想从 Git repo 的特定目录中签出,然后构建我们的代码。没有本地回购维护,什么都没有。只需代码结帐。

我知道有一种叫做“稀疏结帐”的东西。我们有更简单的吗?

我的问题是这个构建脚本可以在任何服务器上运行。因此,如果我选择稀疏结帐,我将不得不在每台服务器上设置 Git,并告诉它如何进行稀疏结帐。

4

3 回答 3

5

要逐字回答您的问题,您必须执行以下操作:

在临时目录中检索 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

然后,您可以删除临时文件并使用结帐。

当然,这可以很容易地放入脚本中!

于 2013-07-24T13:36:11.257 回答
2

Git 哲学与 CVS 相差甚远,所以我建议你在这里采取不同的行动。您的 Git 存储库将被分发,每个开发人员或服务器都将拥有它的副本,其中一个是权威的(origin在 Git 术语中是远程的)。

当你想从一个新的 checkout 开始构建时,你首先说 Git 从 获取最新的更改origin,这称为 fetch。

git fetch origin

然后,要重新签出,您希望您的文件系统与服务器版本完全相同,没有任何其他文件。

git checkout --force origin/master
git clean -d --force

这里的优点是网络操作非常高效,您只从要同步的服务器中获取最新的差异,并且您仍然可以确定您是从正确的文件构建的,而不会更改它们。

您还需要检查用于持续集成的工具,例如 Jenkins,它与 Git 存储库集成得非常好。

于 2013-07-24T13:02:32.820 回答
1

您可以尝试使用该--depth选项克隆您的存储库,看看它是否符合您的需要。--depth 选项不会克隆完整的存储库历史记录,因此会更快。

> git clone http://myrepo.git --depth 1

您可以通过指定分支名称来进一步限制结帐:

> git clone http://myrepo.git -b master --depth 1

如果您只想签出 git 存储库的子目录,AFAIK,目前是不可能的。

于 2013-07-24T12:56:11.547 回答