2016-11-09 127 views
0

tl; dr;我希望保留遷移到git的文件的歷史記錄,包括早期集成的歷史記錄。 即git p4 clone這樣git log --all --follow <file> == p4 filelog -li <file>git p4克隆文件歷史包括積分歷史

加長版:

我在perforce一個項目,包括已經被移動,在過去的reposotory各地的其他項目複製的文件。

p4 filelog -l <file2> 

顯示了文件(-l長期形式)在其當前位置的歷史記錄。 文件被移動(複製),例如p4 integrate

p4 integrate <file1> file2> 

要查看歷史前移到你使用:

p4 filelog -li <file2> 

等效git命令是:

git log --follow <file2> 

現在,如果我使用克隆perforce項目的一部分:

git p4 clone //depot/some/path/[email protected] . 

我得到了文件的完整歷史記錄,就像我爲同一個文件當前目錄位置perforce一樣。

(你得到一個提交的文件,在現在是沒有@all 看到Getting the whole files history with git-p4

我怎麼git log --follow <file2> 給我的全部歷史,我會用p4 filelog -li見過?

您可能會注意到,文件歷史記錄本身不如存儲庫歷史記錄有用。例如,如果沒有其他文件在右側相對位置的正確版本中,單獨文件甚至可能無法編譯。但是,完整的perforce存儲庫包含許多其他不相關項目的歷史記錄,這些項目不得包含在git倉庫中。 我不希望修剪存儲庫或嫁接歷史是一個漫長的痛苦過程(我相對較新的git,現在想避免更黑暗的角落)。

會是什麼採取添加一個選項git p4 clone是複製整個集成的文件歷史記錄,以便--follow作品?

這是非常相似的git p4: migrate full history - including integration history

不像這個問題,我一直使用移動P4庫中的文件集成,因此由Perforce的記錄文件歷史記錄是完整的。這應該使我的工作更輕鬆。雖然我不確定它是否在實踐中。

+0

從根本上說,Perforce會記錄關於您所做的工作的更多信息,而不是git所做的。你可能採取了一些行動,git根本無法代表。你爲什麼不簡單地把你的Perforce服務器放在線上,以便將來你可以參考它進行歷史分析,即使你的新工作在git中提交後也是如此? –

+0

git可以代表文件的增量,它只需要文件的位置。如果該位置位於git repo中不存在的樹中,但我們可以將該文件僞造爲位於(例如,在分支中)的位置,我將允許該位置不正確。 –

+0

將一些代碼移動到git的目標是打開源代碼,讓perforce repo關閉源代碼。所以外部的git用戶將無法訪問它。 –

回答

1

Git的工作方式與Perforce不同,不會跟蹤文件副本和重命名,因此無法通過git p4導入該信息。相反,Git能夠在分析提交時自動識別文件重命名和/或複製。顯然,這需要更多的處理,所以默認情況下它不會被啓用。

您正在查找的是參數-M-C--find-copies-harder。一般而言,您希望使用-M85格式的前兩個參數,其中數字85表示必須等於考慮文件相同的代碼量。這允許檢測在同一提交中重命名和修改的文件。請注意,如果啓用-C,則不需要啓用-M

GIT中P4提供以便檢測這一點,並使用p4 integrate代替p4 delete和/或p4 add提交更改的detectCopiesdetectCopiesHarder配置參數。

+0

你說的是將數據從git轉移到perforce或者從perforce轉移到git?你的最後一條評論「使用p4集成提交」暗示從git到perforce,但我將以另一種方式進行。 –

+0

只需添加額外的信息。這部分與你的目標無關。 – Vitor