programing

GIT: 특정 폴더로 체크아웃

skycolor 2023. 8. 30. 21:32
반응형

GIT: 특정 폴더로 체크아웃

다음과 유사한 기능을 사용합니다.

git checkout -- <path>/<file>

하지만 로컬을 덮어쓰는 대신 내가 선택한 폴더에 파일을 체크아웃하고 싶습니다.<path>/<file>.

감 잡히는 게 없어요?

다른 작업 트리를 지정하면 좀 더 깔끔해진 또 다른 작업 트리를 지정하면 됩니다.

HEAD(인덱스 아님)에서 특정 Out 디렉토리에 이르기까지 모든 항목을 체크아웃하려면:

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

HEAD에서 특정 디렉토리로 하위 디렉토리 또는 파일을 체크아웃하려면:

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

"git export"(예: "svn export")에 따라?

사용할 수 있습니다.git checkout-index이를 위해, 이것은 낮은 수준의 명령입니다. 만약 당신이 모든 것을 내보내려면, 당신은 사용할 수 있습니다.-a,

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

man 페이지 인용하기

[접두사의] 마지막 "/"는 중요합니다.내보낸 이름은 문자 그대로 지정된 문자열 앞에 붙습니다.

특정 디렉터리를 내보내려면 몇 가지 방법이 사용됩니다.이 명령은 파일만 사용하고 디렉터리는 사용하지 않습니다.디렉터리에 적용하려면 'find' 명령을 사용하고 출력을 git에 파이프로 연결합니다.

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

또한 man 페이지에서:

직관력은 여기서 목표가 아닙니다.반복성은.

기능으로 작업 중이고 마스터로 다시 체크아웃하지 않으려면 다음을 실행할 수 있습니다.

cd ./myrepo

git worktree add ../myrepo_master master

git worktree remove ../myrepo_master

생성됩니다.../myrepo_master로의 디렉토리master분기 커밋, 작업을 계속할 수 있는 곳

단일 파일의 경우:

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

아드리안의 대답은 "치명적"이었습니다.이 작업은 작업 트리에서 실행해야 합니다."다음은 우리에게 효과가 있었던 것입니다.

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.

사용하다git archive branch-index | tar -x -C your-folder-on-PC분기를 다른 폴더로 복제합니다.그러면 필요한 파일을 복사할 수 있습니다.

@hasen의 답변에 추가.대신 사용하는 것이 좋습니다.find다음과 같이 체크아웃할 파일을 나열합니다.

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

git ls-files커밋되지 않은 파일을 무시합니다.

임시 디렉토리의 분기를 체크아웃할 때 사용하는 별칭:

[alias]
    cot = "!TEMP=$(mktemp -d); f() { git worktree prune && git worktree add $TEMP $1 && zsh -c \"cd $TEMP; zsh\";}; f" # checkout branch in temporary directory

용도:

git cot mybranch

그런 다음 분기에서 작업할 수 있는 임시 디렉토리의 새 셸에 보관됩니다.이 디렉터리에서 git 명령을 사용할 수도 있습니다.

완료되면 디렉토리를 삭제하고 다음을 실행합니다.

git worktree prune

이 작업은 새 작업 트리를 추가하기 전에 별칭에서도 자동으로 수행됩니다.

(이 질문을 찾기 전에) 이를 달성하기 위해 git 별칭을 정의했습니다.

이것은 현재 경로를 저장하고, Git repo로 전환하고, 체크아웃을 하고, 그것이 시작된 곳으로 돌아오는 짧은 bash 기능입니다.

git check to develop ~/my_project_git

예를 들어, develop 브랜치를 "~/my_project_git" 디렉터리로 체크아웃합니다.

은 내의별코다에 있는 입니다.~/.gitconfig:

[alias]
    checkTo = "!f(){ [ -z \"$1\" ] && echo \"Need to specify branch.\" && \
               exit 1; [ -z \"$2\" ] && echo \"Need to specify target\
               dir\" && exit 2; cDir=\"$(pwd)\"; cd \"$2\"; \
               git checkout \"$1\"; cd \"$cDir\"; };f"

이 작중경우인업에서 .mydir간단하게는 안 되는 이유가 무엇입니까?cp -r mydir mydir2그리고 나서.cd mydir2; git checkout commit#

언급URL : https://stackoverflow.com/questions/4479960/git-checkout-to-a-specific-folder

반응형