2009-04-24 108 views
12

正如我在previous question中提到的,我正在考慮將我們的源代碼控制從Perforce遷移到git。
環顧四周,我發現了git-p4(你必須多挖一點,因爲它甚至不在鏈接指向的版本庫中,實際的git-p4 script很難找到)。使用git-p4獲取整個文件歷史記錄

我現在正在運行這個腳本,它會在新的git倉庫中導入當前版本的文件,但我無法設法獲取歷史記錄,無論我做什麼。

下面是我用的是當前命令行是:

P4CLIENT=my-p4-clientspec git-p4 clone --max-changes=1000 --use-client-spec //p4/path/to/be/imported/...

所以,真正的問題是:如果有人已經成功地導入P4車廠,包括歷史,我想知道如何你做到了。

謝謝!

joce。

回答

19

嘗試追加「@all」到文件路徑。例如,這將產生一個單一版本回購對我來說:

python /usr/share/doc/git-core/contrib/fast-import/git-p4 clone --destination=master-pom \ 
    //depot/services/master-pom/trunk/... 

此命令導入的全部歷史:

python /usr/share/doc/git-core/contrib/fast-import/git-p4 clone --destination=master-pom \ 
    //depot/services/master-pom/trunk/[email protected] 

我使用的例子的git-p4的嘗試,但放棄了幾個原因,寫我自己的快速進口泵。這是一段時間了,所以一些問題現在可能已經被修復了:但是git-p4在大型修改表(比如最初創建分支)時遇到了問題(儘管使用客戶端規範可能有幫助,但是我沒有認爲我嘗試了它)和文件與「+ S」filetype修飾符(這是壞和邪惡,但我們曾經使用它)。而我的Python-fu不會讓我解決我遇到的問題。

編輯:因爲有人問它,在這裏。

https://github.com/araqnid/p4utils有幾個p4的東西,其中p4-git-xfer是p4-> git(單向)複製器。不過,它有很多問題,因爲它主要是個人的手工工具而不是真正的基礎設施。

入門:

p4-git-xfer clone -d $PWD/dictionary.git -n //depot/services/midoffice/dictionary/... \ 
    trunk 'release/*' 'branch/*' \ 
    trunk=master release/*=r* branch/*=dev/* 

將克隆到裸 「dictionary.git」 那Perforce的路徑。基路徑之後的第一個參數是「分支規格」,它告訴複製器在底座下的哪個分支。後面的(帶有'='符號)是「鏡像規格」,它告訴複製器如何從導入的分支創建本地分支。分支規格會導致創建「refs/remotes/p4/trunk」,「refs/remotes/p4/release/1.0」等。鏡像規格強制「refs/heads/master」鏡像「refs/remotes/p4/trunk」,「refs/heads/r1.0」以鏡像「refs/remotes/p4/release/1.0」等。作爲一種讓我從被複制的特定分支中選擇要傳播到克隆的方法。

它會嘗試檢測分支是如何創建的,但這與Perforce無論如何都是有點猜測的。除此之外,它不會嘗試進行任何分支跟蹤:即使是整個分支合併也不會被這樣寫出來,對不起。

初始克隆後,從git副本內部運行p4-git-xfer fetch將執行增量更新。高水位變更表取自git回購中的marks/p4。這是一個快速導入加載的標記文件,因此如果您使用filter-branch重寫某些特殊的腳步,請注意,您也可能需要更新它。

這不是很漂亮,有一些中等到嚴重的問題;我主要是爲了我自己的方便使用它,將我自己從Perforce問題中分離出來,而不是將其作爲日常的關鍵基礎設施組件。這是單向的:我通常使用p4-am腳本來應用由git format-patch創建的補丁。這本身只能居多,與一般的解析污穢,與最終的文件換行符的問題,二元變化等

+0

您的p4導入腳本是公開的嗎?如果是這樣,你介意分享嗎? – joce 2009-05-03 21:07:41

0

我也想弄清楚git-p4。不幸的是,那裏沒有太多的文檔。我想與您取得聯繫,因爲我們可能會互相幫助。

+0

嘿卡爾。您可以通過gmail.com與jocelynlegault聯繫我 – joce 2009-04-28 22:15:32

-1

的混帳-P4的幫助實際上是相當不錯的:

man git-p4 

在Ubuntu 12.04是包括在git-man包中。

0
  1. 安裝的Git的bash(CLI)
  2. 安裝P4 CLI
  3. 安裝python 2.7
  4. 獲取的git-P4腳本>>http://git.kernel.org/cgit/git/git.git/plain/git-p4.py
  5. 把這個腳本轉換爲C /程序/文件/ git的/ bin/
  6. 現在打開git bash或cmd檢查通過輸入python done,p4 done,git done,git p4,
  7. 創建名爲git的客戶端工作區。
  8. 混帳P4克隆貯庫/路/ @全部回購/路徑

以防萬一不工作,如果蟒蛇產生問​​題 集P4CLIENT設置環境變量路徑蟒蛇=混帳

相關問題