簡體   English   中英

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

[英]Equivalence of Perforce “p4 sync -p …@Changelist” in Git

在Perforce中,您實際上可以創建一個clientspec(工作區),並在同步Perforce代碼時使用“-p”選項。 這樣它就不會觸及Perforce服務器中的文件表,並使同步更快。 它基本上是從Perforce服務器復制和粘貼文件。

我們正在Git端試驗這樣的操作,但是找不到這個Perforce命令的精確副本。

這有等價嗎?

我知道git reset --hard <commit>可以工作,但是如果你已經使用了git clone並獲得了文件的本地副本。 在我們的例子中,假設我們從不在本地機器上運行git clone

我在這種情況下問,因為我正在進行SCM發布構建,而Git的源代碼需要在特定的SHA上同步到構建機器,但過去沒有運行git clone

謝謝。

您可以配置git-daemon以允許“upload-archive”服務(請參閱git-daemon聯機幫助頁),這允許客戶端使用git archive --remote簡單地從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 -

git不是為了獲取特定版本的文件,而是為了獲取歷史記錄。 首先進行git clone並在需要更新時進行git 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 git init; git remote add -t <branch> origin <url>; git fetch origin/branch; git checkout origin/branch
  3. git archive可以創建一個快照,可以作為單獨的文件下載,然后解壓縮。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM