2011-07-01 76 views
4

我已經進口了相當大的資源庫,從另一個SCM成飯桶。不幸的是,在Windows上完成了遷移(必須),並且每個文件都被設置爲執行位,並被提交到git中。爲了避免再次進行遷移(這是一個漫長而容易懸掛的過程),我試圖弄清楚是否可以清理可執行位服務器端。我的想法是使用git filter-branch以某種方式與git update-index結合使用,但我可以提示如何繼續。如何改寫歷史刪除可執行位混帳

做了巨大的承諾,在年底結算的所有可執行位是不是一個解決辦法 - 我不希望每個文件在歷史上的凸點。

+2

這似乎是在做詭計: git filter-branch --index-filter'git ls-files -s | sed s/^ 100755/10644/| git update-index --index-info' - --all – simon

+1

您應該將其作爲答案發布,然後您可以(自動)接受。這似乎是一個非常好的技巧,似乎並沒有在其他地方記錄。 – VonC

+0

是的,但在頭八個小時我無法做到這一點。有時候我不明白這個遊戲的規則。 ;) – simon

回答

5

這似乎這樣的伎倆:

git filter-branch --index-filter 'git ls-files -s | 
            sed s/^100755/10644/ | 
            git update-index --index-info' -- --all 
+0

有趣的把戲。 +1 – VonC

1

您的解決方案是相當不錯的,但還有另一種可能性:git config core.filemode false

http://git-scm.com/docs/git-config

core.fileMode

如果fal se,索引和工作副本之間的可執行位差異被忽略;對破碎的文件系統如FAT很有用。請參閱git-update-index(1)。

默認值是正確的,除了GIT中克隆(1)或GIT-INIT(1)將探測並設置core.fileMode假如果合適的話在創建存儲庫時。

這可以爲每個人創造誰擁有克隆在未來回購(也可能不會,我真的不知道)更多的工作,讓您的解決方案可能是更好的,但我想我會扔這在那裏,因爲它可能更適合別人的使用情況...

+2

已經用可執行位簽入的文件不會被這個幫助。無論如何,它們將在檢出時設置可執行位。不過,core.filemode = false會阻止這種情況發生。恕我直言,它應該是Windows上的默認設置。 我要強調的是,重寫歷史上最初的進口,這就是我現在做的非常有用的,但當然有問題你已經把倉庫投入生產後。 – simon