힘내 : 다른 지점에서 디렉토리의 모든 파일을 복사


189

다른 지점의 디렉토리에있는 모든 파일을 어떻게 복사합니까? 수행하여 해당 디렉토리의 모든 파일을 나열 할 수 있습니다

git ls-tree master:dirname

그런 다음 모든 파일을 개별적으로 복사하여

git checkout master -- dirname/filename

그러나 지금까지 와일드 카드를 사용하는 것은 완전히 실패했습니다. 이것은 아무것도하지 않습니다 :

git checkout master -- dirname/*.png

bash 스크립트를 사용하여 그렇게 할 수 있다고 생각하지만 더 쉬운 방법이 있어야합니까?

답변:


289

트리에서 파일을 옮기지 않으려는 경우 디렉토리를 체크 아웃하면됩니다.

git checkout master -- dirname

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

2
@totels, 엄밀히 말하면 파일과 관련된 커밋 메시지는 없습니다. 커밋 메시지는 커밋 개체 자체와 연결됩니다. 이것은 내가 당신이 원하는 것입니다 : git checkout master -- dirname; git add dirname; git commit -c $COMMIT_SHA1 --reset-author;어디 에서 커밋 메시지가있는 커밋 객체와 $COMMIT_SHA1같을 수 있습니다 branch_a. 프로그래밍 방식으로 가장 최근에 변경된 커밋을 프로그래밍 방식으로 결정하는 방법을 알지 못합니다dirname
Alexander Bird

1
이것은 매우 이상한 부작용이 있습니다. 그것은 사본 dirname이상하지만, 또한 복사에있는 모든 파일 .gitignoremaster지점. 왜 그런지 아십니까?
Milimetric

4
또 다른 부작용 현재 분기에 체크 아웃 한 분기 (주어진 대상 폴더에서)에 추가 파일이 없으면 기본적으로 함께 병합됩니다. 아마도 조상 인 경우일까요? 정확히 조건을 확신 할 수는 없지만 지점 A에 20 개의 파일이 있고 지점 B에 20 개의 파일이 있고 그중 10 개만 동일한 파일 이름을 가진 경우 30 개 파일로 끝납니다 (적어도 내 경우에는 지점 A B)의 조상입니다)
codercake

@totels는 git 명령을 확인하십시오 cherry-pick. 다른 분기의 커밋을 적용하지만 원하는 커밋에서 변경된 파일 만 적용합니다.
cs01

18

경로에 공백이없고 특정 확장자의 파일에만 관심이있는 경우 다음을 사용할 수 있습니다

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

4
git 이이 기능을 직접 지원하지 않는 것은 유감입니다. 정확히 OP처럼, 나는 그것이 같은 것이라고 생각했을 것이다git checkout master -- *.c
그레고리 쿤

1
이 답변은 "다른 지점에서 현재 작업중인 지점으로 지정된 패턴의 파일을 어떻게 체크 아웃 할 수 있습니까?"
usr-local-ΕΨΗΕΛΩΝ
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.