2011-02-15 77 views
1

在Perforce中,实际上可以创建clientspec(工作区),并在同步Perforce代码时使用“-p”选项。这样它就不会触及Perforce服务器中的文件表,并且使得同步速度更快。它基本上是从Perforce服务器复制和粘贴文件。Git中的Perforce“p4 sync -p ... @ Changelist”的等效性

我们正在Git一边尝试这样的操作,但找不到这个Perforce命令的确切副本。

这是否等价?

我知道git reset --hard <commit>会工作,但这就是如果您已经使用git clone并获得本地副本的文件。在我们的案例中,假设我们从未在本地机器上运行git clone

我在问这种情况,因为我正在做SCM版本构建,并且Git的源代码需要在特定的SHA下同步到构建机器,但没有git clone在过去运行。

谢谢。

回答

0

git的设计目的并不在于获取特定的版本的文件,而是历史记录。更新需要发生时,首先执行git clonegit fetch是否确实存在问题?更新使用差异,因此可以比复制所有文件快得多,并且git存储库通常不会比当前状态大得多。

这就是说,有不复制所有历史上的几种方法:

  1. git clone --depth 1将只能得到最近的历史,但它仍然获取所有分支机构。它也不是一个非常有用的克隆,因为许多常见的操作都不起作用。这在你的用例中可能不是问题。
  2. 您可以只设置一个具有要复制状态的提交的临时分支。然后客户端可以创建一个可以作为单独文件下载,然后提取的快照。
+0

`git clone --depth = 1`是我最初测试的,但它不起作用因为它总是得到HEAD。这不是我们当前的SCM机器可以做到的。 – xbeta 2011-02-15 21:29:52

+0

选项#2很好,但我们在不同的时间每天讨论20个构建,对于选项#3,在不同的更改(SHA) – xbeta 2011-02-15 21:31:44

4

可以配置git的守护让“上传存档”服务(见git的守护程序手册页),这使得客户端只需请求特定的快照存档从git仓库,使用git archive --remote命令,而不必下载整个数据库。

例如这将从远程服务器下载1.0.0版本的一个名为“cmstool”的项目的快照:

git archive --format=tar \ 
      --prefix=cmstool-1.0.0/ \ 
      --remote=git://git/cmstool.git v1.0.0 | tar xf - 
相关问题