2010-09-12 25 views
80

我希望能夠爲腳本執行此操作。我基本上是在Git中重新創建一些代碼的整個版本歷史記錄 - 它目前使用不同的版本控制系統。我需要腳本能夠在保留提交的原作者(和日期)的同時將提交添加到Git中。你如何以不同的用戶來提交代碼?

假設我知道提交作者和更改的日期/時間,是否有Git命令允許我這樣做?我假設有,因爲git-p4做了類似的事情。我只是要求最好的方式來做到這一點。

+1

您是否嘗試過使用快速導入? – alternative 2010-09-12 23:03:02

+0

我同意,[fast-import](http://www.kernel.org/pub/software/scm/git/docs/git-fast-import.html)可能是最好的選擇。你可以使用* git commit *(或者更合適的底層管道:* hash-object *,* update-index *,* write-tree *,* commit-tree *,* update-ref *等),但是*快速導入*會更快。 – 2010-09-12 23:39:05

+0

我的確在想快速導入,但由於我自己就是git初學者,所以我決定使用基本命令。說實話,我並不完全理解快速導入是如何工作的,因此,直到我更好地理解它,我們纔有點猶豫。是的,使用提交會慢很多,但至少我會知道會發生什麼 - 特別是在調試時。 – Carl 2010-09-12 23:47:34

回答

113

檢查出git commit--author選項:

man page

--author=<author>

覆蓋提交作者。使用標準A U Thor <[email protected]>格式指定明確的作者 。否則 <author>被假定爲 的模式,並用於搜索該作者所提交的現有 (即rev-list --all -i --author=<author>);首先提交作者從 中複製這樣的提交。

+12

此外,'--date'選項覆蓋日期。 – 2010-09-12 23:21:25

+0

你可以舉一個具體的例子,我試試的一切 – studgeek 2011-06-17 17:13:37

+0

@Tim Henigan:看起來文檔現在託管在[Github](http://schacon.github.com/git/git-commit.html)上,所以* man您發佈的網頁*鏈接已死亡。你能否確認新的頁面是一樣的(如果還有其他需要更新鏈接的答案)? – R0MANARMY 2012-02-06 19:11:54

58

我想補充這件事:接受的答案中提到的--author選項只覆蓋了作者,而不是提交者的提交信息。

也就是說在大多數情況下,正確的行爲,但如果由於某種原因,你需要手動覆蓋提交者信息爲好,使用GIT_COMMITTER_NAMEGIT_COMMITTER_EMAIL環境變量(有一個GIT_COMMITTER_DATE爲好)。見Git-Internals-Environment-Variables

$ GIT_COMMITTER_NAME="New Name" GIT_COMMITTER_EMAIL="[email protected]" git commit --author="New Name <[email protected]>" 

這將使提交看上去像是撰寫指定用戶提交。

+8

...並查看區別: 'git log --pretty = fuller' – bluenote10 2015-11-03 20:41:52

+0

完美。這就是我想要的,我從來沒有找到git內部手冊頁。 – ksp 2017-05-17 07:02:40

相關問題