2011-02-15 72 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 - 
相關問題