2013-02-16 108 views
0

我想用git嘗試一些東西,我不想在工作存儲庫中搞亂任何東西。複製Git裸回購更改日誌?

爲了讓事情安全起見,我製作了一份裸露的回購協議副本,我從這個回購協議以及此回購協議中準備完成所有推送和標記。我用:

cp --preseve -r original.git copy_of_original.git 

雖然我明白一個可以撤消壞的提交和諸如此類的東西,我不想離開所有這些還原提交回購,我也不想做任何重構,因此我的願望,只是從一個重複的裸倉庫工作。

的問題是,我執行以下命令:

git diff --name-only [email protected]{"5 day ago"} master 

,並取回:

warning: Log for 'master' only goes back to Fri, 15 Feb 2013 20:42:43 -0500. 

原來的回購,這是我不想碰,確實有其人的文件5天前修改。

如果我在複製的回購庫上執行git log,這些5天前更改的記錄仍然存在。

這是怎麼回事?

有沒有更好的方法來製作版本庫的獨立副本?

更新1

我意識到我是不準確的我的問題。我已經運行:從生產

git diff --name-only [email protected]{"5 day ago"} 

目錄:

git clone copy_of_original.git clone_of_copy 

回答

1

@{5 days ago}語法依賴於reflog的信息,因爲 在下面引用的git-rev-parse文檔部分中進行了說明。 重述日誌本地存儲庫,並且永遠不會通過克隆,獲取或推送進行傳輸。這不是git log顯示的信息,除非使用-g--walk-reflogs選項。

裸倉庫通常不保留引用日誌,因此版本庫 的副本也不會有這些信息。

<refname>@{<date>}, e.g. [email protected]{yesterday}, [email protected]{5 minutes ago} 
    A ref followed by the suffix @ with a date specification enclosed in a brace pair 
    (e.g. {yesterday}, {1 month 2 weeks 3 days 1 hour 1 second ago} or {1979-02-26 
    18:30:00}) specifies the value of the ref at a prior point in time. This suffix may 
    only be used immediately following a ref name and the ref must have an existing log 
    ($GIT_DIR/logs/<ref>). Note that this looks up the state of your local ref at a 
    given time; e.g., what was in your local master branch last week. If you want to 
    look at commits made during certain times, see --since and --until. 
+0

然後,如果我做一個'git pull'在我的本地副本的存儲庫,將運行'git diff --name-only master @ {「5天前」}'使用我做'git pull'的日期而不是當人們提交時提交? – EMiller 2013-02-16 02:37:18

+0

'@ {time}'從不使用提交時間。沒有一種方法可以在一般情況下工作,因爲歷史記錄中可能有多個分支,並且提交併不總是按日期順序(無論是因爲重新安排提交還是某個人的時鐘設置不正確)。 – qqx 2013-02-16 02:40:09

+0

但是沒有辦法可靠地查詢主服務器中的任何文件是否因爲一段時間而通過合併或提交進行更新? – EMiller 2013-02-16 02:48:35

0

每個克隆包括庫的完整副本(在的情況下,你有一個分支,碩士),裏面的。 git目錄。每個副本獨立於其他副本,並通過本地提交進行修改,或從其他存儲庫中提取。

所以遞歸副本是完全沒問題的。

至於你所看到的,你需要提供更多的細節和更完整的命令列表。

0

如果克隆,只有的東西一部分被複制,如果你副本,您有原始資料庫的相同版本。這適用於git;可以備份和恢復等