GIT : 특정 폴더로 결제 <path>/<file> 그러나 local을

비슷한 것을 사용하고 싶습니다 :

git checkout -- <path>/<file>

그러나 local을 덮어 쓰지 않고 선택한 폴더로 파일을 체크 아웃하고 싶습니다 <path>/<file>.

어떤 생각?



답변

( “SVN 수출”와 같은)는 “자식 수출”합니까?

사용할 수 있습니다 git checkout-index. 이것은 저수준 명령입니다. 모든 것을 내보내려면을 사용할 수 있습니다 -a.

git checkout-index -a -f --prefix=/destination/path/

매뉴얼 페이지를 인용하려면 :

접두사에서 마지막 “/”가 중요합니다. 내 보낸 이름은 문자 그대로 지정된 문자열로 시작합니다.

특정 디렉토리를 내보내려면 몇 가지 트릭이 필요합니다. 이 명령은 디렉토리가 아닌 파일 만 가져옵니다. 디렉토리에 적용하려면 ‘find’명령을 사용하고 출력을 git으로 파이프하십시오.

find dirname -print0 | git checkout-index --prefix=/path-to/dest/ -f -z --stdin

또한 매뉴얼 페이지에서 :

직관적 인 목표는 여기에 없습니다. 반복성은


답변

좀 더 깔끔한 또 다른 솔루션-다른 작업 트리를 지정하십시오.

HEAD (인덱스 아님)에서 특정 출력 디렉토리까지 모든 항목을 체크 아웃하려면 다음을 수행하십시오.

git --work-tree=/path/to/outputdir checkout HEAD -- .

HEAD에서 특정 디렉토리로 서브 디렉토리 또는 파일을 체크 아웃하려면 다음을 수행하십시오.

git --work-tree=/path/to/outputdir checkout HEAD -- subdirname


답변

단일 파일의 경우 :

git show HEAD:abspath/to/file > file.copy


답변

위의 솔루션은 특정 태그 버전의 트리를 확인해야했기 때문에 작동하지 않았습니다. 그건 cvs export그렇고, 그것이 사용되는 방법입니다. git checkout-index인덱스에서 파일을 체크 아웃하므로 태그 인수를 사용하지 않습니다. git checkout <tag>작업 트리에 관계없이 색인을 변경하므로 원래 트리를 재설정해야합니다. 나를 위해 일한 해결책은 저장소를 복제하는 것이 었습니다. 공유 클론은 매우 빠르며 추가 공간을 많이 차지하지 않습니다. .git원하는 경우 디렉토리는 제거 할 수 있습니다.

git clone --shared --no-checkout <repository> <destination>
cd <destination>
git checkout <tag>
rm -rf .git

최신 버전의 git은 git clone --branch <tag>지정된 태그를 자동으로 체크 아웃하도록 지원해야합니다 .

git clone --shared --branch <tag> <repository> <destination>
rm -rf <destination>/.git


답변

기능을 수행 중이고 마스터로 다시 체크 아웃하고 싶지 않은 경우 다음을 실행할 수 있습니다.

cd ./myrepo

git worktree add ../myrepo_master master

git worktree remove ../myrepo_master

분기 커밋으로 ../myrepo_master디렉토리를 생성하여 master작업을 계속할 수 있습니다.


답변

Adrian의 답변은 “치명적 :이 작업은 작업 트리에서 실행해야합니다.” 다음은 우리를 위해 일한 것입니다.

git worktree add <new-dir> --no-checkout --detach
cd <new-dir>
git checkout <some-ref> -- <existing-dir>

노트:

  • --no-checkout 새 작업 트리에 아무것도 체크 아웃하지 마십시오.
  • --detach 새 작업 트리에 대한 새 분기를 작성하지 마십시오.
  • <some-ref>예를 들어와 함께 작동하는 모든 참조와 함께 작동합니다 HEAD~1.
  • 로 정리하십시오 git worktree prune.

답변

@hasen의 답변에 추가 . checkout 할 파일을 나열하려면 다음 git ls-files대신 사용하십시오 find.

git ls-files -z *.txt | git checkout-index --prefix=/path-to/dest/ -f -z --stdin