当我们构建应用程序时,我们首先从CVS存储库的目录中获取代码然后构建它。 所以在Git中,我们有类似的东西吗?我只想从一个特定的Git仓库处理结账,然后构建我们的代码。没有本地仓库维护,没有。只是代码结账。
我知道有一种叫做“稀疏结账”的东西。我们有什么更简单的吗?
我的问题是这个构建脚本可以在任何服务器上运行。因此,如果我选择Sparse checkout,我将不得不继续使用每台服务器,设置Git并告诉它如何进行稀疏结账。
答案 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的子目录,则目前无法进行此操作。