programing

새 이름으로 파일의 이전 버전을 git-valuing합니다.

linuxpc 2023. 5. 1. 20:00
반응형

새 이름으로 파일의 이전 버전을 git-valuing합니다.

"파일을 가지고 있습니다.main.cpp내 편집기에서 열립니다.

"의 이전 개정판을 보고 싶습니다.main.cpp편집장에서도.

제가 지금 하는 방법은 이렇습니다.

close "main.cpp" in the editor

prompt> mv main.cpp tmp
prompt> git checkout HEAD^ main.cpp
prompt> mv main.cpp old_main.cpp
prompt> mv tmp main.cpp
prompt>

open "main.cpp" and "old_main.cpp" in the editor

편집기에서 "main.cpp"를 닫을 필요가 없도록 단순화할 수 있습니까?

제가 바라는 것은 변형된 것입니다.git-checkout할 수 있는 일입니다.


업데이트: 저는 macosx 10.5.7에서 git를 사용하고 있습니다.

prompt> git --version
git version 1.6.0.4
prompt> 

업데이트 2: Jakub Narębski 답변:

prompt> git show HEAD^:dir1/dir2/dir3/main.cpp > old_main.cpp
prompt>

업데이트 3: 특정 개정에 대한 Karmi의 답변:

prompt> git show 4c274dd91dc:higgs/Higgs.xcodeproj/project.pbxproj > old_project.pbxproj
prompt> 

사용할 수 있습니다.git show이를 위해:

git show HEAD^:main.cpp > old_main.cpp

(콜론이 있음에 유의하십시오.:사이의 문자HEAD^그리고.main.cpp.) 그<revision>:<path>구문은 "수정기호 지정" 섹션의 마지막 지점 옆에 있는 git rev-parse man 페이지에 설명되어 있습니다.

<rev>:<path>,예.HEAD:README,:README,master:./README

접미사:경로 뒤에 콜론 앞에 있는 부분에서 이름을 지정한 트리 모양 개체의 지정된 경로에 있는 블롭 또는 트리 이름을 지정합니다. :path(콜론 앞에 빈 부분이 있음)은 다음에 설명하는 구문의 특수한 경우입니다. 즉, 지정된 경로의 인덱스에 내용이 기록됩니다.다음으로 시작하는 경로./또는../는 현재 작업 디렉터리에 상대적입니다.지정된 경로는 작업 트리의 루트 디렉터리에 상대적으로 변환됩니다.이것은 작업 트리와 동일한 트리 구조를 가진 커밋 트리에서 블로브 또는 트리를 지정하는 데 가장 유용합니다.

참고:<path>프로젝트의 상위 디렉터리에 대한 전체 경로입니다. 즉, 다음과 같은 디렉터리입니다..git/디렉터리. (더 정확하게는, 일반적으로 임의의 <트리-이시>, 즉 트리를 나타내는 것일 수 있는 "<리비전>"으로)

현재 디렉토리에 상대적인 경로를 사용하려면 다음을 사용해야 합니다../<path>구문(또는)../path현재 디렉터리에서 위로 이동).

2015-01-15 편집: 상대 경로 구문에 대한 정보 추가


대부분의 경우 로우 레벨(플럼핑)을 사용하여 동일한 출력을 얻을 수 있습니다.git cat-file명령:

git cat-file blob HEAD^:main.cpp > old_main.cpp

Jakub의 대답에 덧붙이자면: 출력을 파일로 리디렉션할 필요조차 없습니다.>터미널의 파일 내용을 스킴하는 데만 관심이 있다면,그냥 도망쳐도 돼요$ git show 58a3db6:path/to/your/file.txt.

단일 파일 사용 사례

다음을 포함한 일관된 체크아웃 동작을 얻기 위해autocrlf등, 보조 폴더(예: TEMP)를 사용하고 이전/다른 폴더에서 파일 상태를 복원합니다.<commit>다음과 같이:

git --work-tree TEMP/ restore main.cpp -s <commit>
mv TEMP/main.cpp old_main.cpp

별칭을 사용하여 한 줄 명령으로 만들기

git restore-as old_main.cpp main.cpp -s <commit>

별칭 만들기:

git config --global alias.restore-as "!f() { git --work-tree /tmp/ restore $2 $3 $4 $5 $6 && mv -iv /tmp/$2 $1; }; f"

의 대체품)/tmp/ 이한작위예예디렉토리약된해을업러예▁reserved(:리▁directory토디▁with)를 합니다./tmp/gitmv생성한 후.)

참고:

git show <commit>:main.cpp > old_main.cpp

저장소에서 원시 읽기만 생성합니다.

두 번째 작업 트리 사용 - 연결 또는 익명

장기 병렬 작업 트리(주 작업 트리가 있는 저장소에 링크됨/알려짐)는 git-work 트리(git v2.6.7 이후 새로 추가됨)를 통해 사용할 수 있으며 다른 분기에 HEAD를 둘 수 있습니다.<commit>:

git worktree add [<options>] <new-worktree-path> [<commit-ish>]

는 초기체크아웃 될 수 .--no-checkout) 및 그 이후sparse-checkout한 개별 파일을 도 있습니다.git restore -s <commit> <file(s)/sub-dir>

"HEAD"를 입력하기만 하면 익명 를 수 ..git이 담긴 내용으로 .

gitdir: <MAIN-REPO-WORKTREE>/.git

저는 @kxr의 답변을 직장으로 받지 못했습니다.그리고 저는 이것이 더 간단하다고 생각합니다.

# Rename the current file.
mv path/to/file.txt path/to/file_current.txt`

# Checkout some other version of that file.
git checkout <commit> -- path/to/file.txt

이는 다음을 사용하는 허용된 답변보다 더 좋습니다.git show보이지 않는 캐릭터를 보존하기 때문입니다.

참고: 위의 코드에서는 원래 파일 이름을 유지하는 파일의 "다른 버전"이며, 현재 파일은 이름을 변경해야 합니다.

한 줄로 이 작업을 수행하는 Git 별칭이 있습니다.이 명령은 실제로 현재 파일이 원래 파일 이름을 유지하도록 합니다.

restore-as = "!mv $1 $1_tmp && git checkout $3 -- $1 && git restore --staged $1 && mv $1 $2 && mv $1_tmp $1 #"(필요한 이유는 여기를 참조하십시오.#

그러면 다음과 같은 용도로 사용할 수 있습니다.git restore-as path/to/file.txt path/to/file_old.txt <commit>

언급URL : https://stackoverflow.com/questions/888414/git-checkout-older-revision-of-a-file-under-a-new-name

반응형