2010-04-19 36 views
117

如何從另一個分支複製目錄中的所有文件?我可以通過做Git:從另一個分支複製目錄中的所有文件

git ls-tree master:dirname 

然後我可以複製所有的文件單獨做

git checkout master -- dirname/filename 

然而,列出使用通配符迄今共有失敗都在該目錄中的文件。這無助:

git checkout master -- dirname/*.png 

雖然我想我可以使用bash腳本要做到這一點,必須有一個更簡單的方法,對嗎?

回答

167

如你是不是要在樹中移動的文件,你應該能夠只檢出目錄:

git checkout master -- dirname 
+0

如果我想保留對複製文件的提交消息,那麼怎麼辦? – totels 2011-04-19 11:43:06

+2

@totels,嚴格來說,沒有與文件相關的提交消息;提交消息與提交對象本身相關聯。這是我猜你想要的:'git checkout master - dirname; git add dirname; git commit -c $ COMMIT_SHA1 --reset-author;'其中'$ COMMIT_SHA1'可能像'branch_a',並且是提交對象,它具有所需的提交消息。我不知道如何以編程方式確定最近更改爲'dirname'的提交。 – 2012-04-10 02:15:16

+1

這有一個非常奇怪的副作用。它複製'dirname',但它也複製'master'分支'.gitignore'中的所有文件。任何想法,爲什麼? – Milimetric 2013-02-24 13:08:59

12

如果在路徑沒有空格,和你有興趣,喜歡我是,在只有特定擴展名的文件中,您可以使用

git checkout otherBranch -- $(git ls-tree --name-only -r otherBranch | egrep '*.java') 
+2

很遺憾git不直接支持這個函數。完全像OP,我會認爲它會像'git checkout master - * .c' – 2015-04-15 11:17:46

相關問題