2010-04-19 7 views
117

다른 지점의 디렉토리에있는 모든 파일을 어떻게 복사합니까? 지금까지 실패 총되었습니다 와일드 카드를 사용하여 개별적 그러나 힘내 : 다른 지점의 디렉토리에있는 모든 파일 복사

git checkout master -- dirname/filename 

을 수행하여

git ls-tree master:dirname 

그때 모든 파일을 복사 할 수 있습니다를 수행하여 그 디렉토리에있는 모든 파일을 나열 할 수 있습니다. 이것은 아무것도하지 않습니다.

git checkout master -- dirname/*.png 

내가 그렇게 할 수있는 bash 스크립트를 사용할 수는 있겠지만 쉬운 방법이 있어야합니다. 맞습니까?

답변

167

당신이 나무 주위에 파일을 이동하려고하지 않는 것처럼, 당신은 단지 디렉토리 체크 아웃 할 수 있어야한다 : 경로에 공백이 없을 경우

git checkout master -- dirname 
+0

복사 된 파일에 대한 커밋 메시지를 유지하려면 어떻게해야합니까? – totels

+2

@totels, 엄밀히 말하면 파일과 관련된 커밋 메시지가 없습니다. ? L 트 메시지는 확약 오브젝트 자체와 연관됩니다. 이것이 내가 원하는 것 같다.'git checkout master - dirname; git add dirname; git commit -c $ COMMIT_SHA1 --reset-author;''$ COMMIT_SHA1'은'branch_a'와 같을 수 있고 당신이 원하는 커밋 메시지를 가진 커밋 객체가 될 것입니다. 가장 최근의'dirname '변경으로 프로그래밍 방식으로 커밋을 결정하는 방법을 알지 못합니다. –

+1

이것은 매우 이상한 부작용이 있습니다. 'dirname'을 복사하지만'master' 브랜치의'.gitignore'에있는 파일도 복사합니다. 왜 그런지 알기나 해? – Milimetric

12

을, 그리고 당신은 내가 같은 관심 특정 확장명의 파일에서만 사용할 수 있습니다.

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

git이이 함수를 직접 지원하지 않는다는 것이 유감입니다. 정확하게 OP와 마찬가지로, 나는'git checkout master - * .c'와 같을 것이라고 생각했을 것이다. –

관련 문제