Git “性能的等效性”;p4同步-p…@Changelist“;吉特

Git “性能的等效性”;p4同步-p…@Changelist“;吉特,git,perforce,Git,Perforce,在Perforce中,您实际上可以创建clientspec(工作区),并在同步Perforce代码时使用“-p”选项。这样一来,它就不会触及Perforce server中的文件表,并使同步速度更快。它基本上是从Perforce服务器复制和粘贴文件 我们正在Git端试验这种操作,但找不到这个Perforce命令的精确副本 这有等价物吗 我知道,git reset——硬的可以工作,但前提是您已经使用了git clone并获得了文件的本地副本。在我们的例子中,假设我们从未在本地机器上运行git cl

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

我们正在Git端试验这种操作,但找不到这个Perforce命令的精确副本

这有等价物吗

我知道,
git reset——硬的
可以工作,但前提是您已经使用了
git clone
并获得了文件的本地副本。在我们的例子中,假设我们从未在本地机器上运行
git clone

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


谢谢。

git的设计目的不仅仅是获取特定版本的文件,而是获取历史记录。首先执行
git克隆
,然后在需要更新时执行
git获取
真的有问题吗?更新使用差异,因此可以比复制所有文件快得多,而且git存储库通常不会比当前状态大太多

也就是说,有几种方法可以避免复制所有历史:

  • git clone--depth 1
    将只获取最近的历史记录,但它仍然获取所有分支。它也不是一个非常有用的克隆,因为许多常见的操作都不起作用。在您的用例中,这可能不是问题
  • 您可以设置一个临时分支,其中只有一个提交具有要复制的状态。然后客户机执行
    git init;git远程add-t源;git获取来源/分支;git签出来源/分支机构
  • git archive
    可以创建快照,该快照可以作为单独的文件下载,然后提取

  • git的设计目的不仅仅是获取特定版本的文件,还包括历史记录。首先执行
    git克隆
    ,然后在需要更新时执行
    git获取
    真的有问题吗?更新使用差异,因此可以比复制所有文件快得多,而且git存储库通常不会比当前状态大太多

    也就是说,有几种方法可以避免复制所有历史:

  • git clone--depth 1
    将只获取最近的历史记录,但它仍然获取所有分支。它也不是一个非常有用的克隆,因为许多常见的操作都不起作用。在您的用例中,这可能不是问题
  • 您可以设置一个临时分支,其中只有一个提交具有要复制的状态。然后客户机执行
    git init;git远程add-t源;git获取来源/分支;git签出来源/分支机构
  • git archive
    可以创建快照,该快照可以作为单独的文件下载,然后提取

  • 您可以将git守护程序配置为允许“上载存档”服务(请参阅git守护程序手册页),这允许客户端使用
    git archive--remote
    命令从git存储库请求特定快照的存档,而不必下载整个数据库

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

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

    您可以将git守护程序配置为允许“上载存档”服务(请参阅git守护程序手册页),这允许客户端使用
    git archive--remote
    命令从git存储库请求特定快照的存档,而不必下载整个数据库

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

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

    git clone--depth=1
    是我最初测试的东西,但它工作不太好,因为它总是得到头部。这不是我们当前的SCM机器所能做的。选项2很好,但我们讨论的是每天在不同的时间、不同的更改(SHA)进行20次构建。对于选项3,
    git archive
    运行的速度有多快
    git clone--depth=1
    通常需要2分钟才能在最佳情况下下载我们的源代码。对于#1,您可以在共享对象池的同一台机器上设置另一个repo(因此无需复制),并适当地指向其头部。您好,这基本上意味着,每次我开始构建时,都必须创建一个新的回购协议,而这个版本一直都有不同的变化(我们现在讨论的是每天20个版本。
    git clone--depth=1
    是我最初测试的,但它不太好用,因为它总是会出错。这不是我们当前的SCM机器所能做的。选项#2可以,但我们每天讨论20个版本,在不同的时间,不同的更改(SHA)对于选项3,
    git archive
    运行的速度有多快?
    git clone--depth=1
    通常需要大约2分钟才能在最佳情况下下载我们的源代码。对于#1,您可以在共享对象池的同一台机器上设置另一个repo(因此无需复制),并适当地指向它的头部。嗨,wnoise,这基本上意味着每次开始构建时,我都必须创建一个新的repo,该构建一直有不同的更改:(我们讨论的是每天20次构建。请注意,如果您同意从不使用git子模块,这是最好的方法。您不能在使用git archive执行的签出上运行git submodule init/update,因为没有git元数据可用。我想您可以写一些东西来查看下载的.gitmodules文件,并使用它来获取submodules递归?实际上是一行程序,这无疑会大大增加复杂性。请注意,如果您同意从不使用git子模块,这是最好的方法。您不能在使用git archive执行的签出上运行git子模块init/update,因为没有git元数据可用。我想您可以编写