비슷한 것을 사용하고 싶습니다 :
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