Git从特定目录结帐

时间:2013-07-24 11:50:10

标签: git git-checkout

当我们构建应用程序时,我们首先从CVS存储库的目录中获取代码然后构建它。 所以在Git中,我们有类似的东西吗?我只想从一个特定的Git仓库处理结账,然后构建我们的代码。没有本地仓库维护,没有。只是代码结账。

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

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

3 个答案:

答案 0 :(得分:5)

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

在临时目录中检索回购数据

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

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

当然,这很容易放在脚本中!

答案 1 :(得分:2)

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

如果你想从新结账开始构建,首先要说Git从origin获取最新的更改,这称为获取。

git fetch origin

然后,要进行新的结帐,您希望您的文件系统与服务器版本完全相同,而不需要任何其他文件。

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

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

您还需要检查持续集成工具,例如Jenkins,它与Git存储库完全集成。

答案 2 :(得分:1)

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

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

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

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

如果您只想结帐git存储库AFAIK的子目录,则目前无法进行此操作。