Git中Perforce“p4 sync -p ... @ Changelist”的等价性

时间:2011-02-15 21:02:40

标签: git perforce

在Perforce中,您实际上可以创建一个clientspec(工作区),并在同步Perforce代码时使用“-p”选项。这样它就不会触及Perforce服务器中的文件表,并使同步更快。它基本上是从Perforce服务器复制和粘贴文件。

我们正在Git端尝试此类操作,但无法找到此Perforce命令的精确副本。

这是否等同?

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

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

感谢。

2 个答案:

答案 0 :(得分:4)

您可以配置git-daemon以允许“upload-archive”服务(请参阅git-daemon联机帮助页),这允许客户端使用{来简单地从git存储库请求特定快照的存档。 {1}}命令,而不是必须下载整个数据库。

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

git archive --remote

答案 1 :(得分:0)

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

尽管如此,有一些方法可以不复制所有历史记录:

  1. git clone --depth 1只会获取最近的历史记录,但它仍会获取所有分支。它也不是一个非常有用的克隆,因为许多常见的操作都行不通。这可能不是您的用例中的问题。
  2. 您可以设置一个短暂的分支,只有一个提交具有您要复制的状态。然后客户端执行git init; git remote add -t <branch> origin <url>; git fetch origin/branch; git checkout origin/branch
  3. git archive可以创建一个快照,可以作为单独的文件下载,然后解压缩。