programing

원격 저장소의 특정 버전 GitClone

iphone6s 2023. 6. 21. 22:24
반응형

원격 저장소의 특정 버전 GitClone

약 한 달 전에 원격 깃 저장소를 복제했습니다.원격 저장소는 많은 변경을 거쳤으며 이제 불안정해졌습니다.이제 한 달 전에 복제한 것과 동일한 버전의 저장소 복사본이 하나 더 필요합니다.

이거 어떻게 하는 거지?

원하는 모든 커밋(예: 한 달 전)으로 저장소를 "재설정"할 수 있습니다.

다음에 대해 git-reset을 사용합니다.

git clone [remote_address_here] my_repo
cd my_repo
git reset --hard [ENTER HERE THE COMMIT HASH YOU WANT]

간단하게 사용할 수 있습니다.

git checkout  commithash

이 순서로

git clone `URLTORepository`
cd `into your cloned folder`
git checkout commithash

커밋 해시는 "45ef55ac20ce2389c9180658(ba35f4a663d)"처럼 보입니다.

사용하다git log롤백할 수정본을 찾고 커밋 해시를 기록합니다.그런 다음 두 가지 옵션이 있습니다.

  1. 개정 후 커밋할 사항이 있으면 새 지점으로 체크아웃할 을 권장합니다.

  2. 그 개정 이후에 아무것도 커밋할 계획이 없다면 지점 없이 간단히 체크아웃할 수 있습니다. - 참고:이렇게 하면 리포지토리가 '분리된 HEAD' 상태가 됩니다. 즉, 현재 분기에 연결되어 있지 않습니다. 그러면 새 커밋을 실제 분기에 병합하기 위한 추가 작업이 발생합니다.

예:

$ git log
commit 89915b4cc0810a9c9e67b3706a2850c58120cf75
Author: Jardel Weyrich <suppressed>
Date:   Wed Aug 18 20:15:01 2010 -0300

    Added a custom extension.

commit 4553c1466c437bdd0b4e7bb35ed238cb5b39d7e7
Author: Jardel Weyrich <suppressed>
Date:   Wed Aug 18 20:13:48 2010 -0300

    Missing constness.

$ git checkout 4553c1466c437bdd0b4e7bb35ed238cb5b39d7e7
Note: moving to '4553c1466c437bdd0b4e7bb35ed238cb5b39d7e7'
which isn't a local branch
If you want to create a new branch from this checkout, you may do so
(now or later) by using -b with the checkout command again. Example:
  git checkout -b <new_branch_name>
HEAD is now at 4553c14... Missing constness.

이렇게 하면 정보가 손실되지 않으므로 안정적으로 변경될 때 최신 버전으로 이동할 수 있습니다.

필요한 버전이 분기 또는 태그인 경우:

git clone -b branch_or_tag_name repo_address_or_path

uploadpack.allowReachableSHA1InWant

Git 2.5.0에서는 이 구성 변수를 서버에서 사용할 수 있으므로 여기서 GitHub 기능 요청 및 GitHub 커밋을 사용하여 이 기능을 사용할 수 있습니다.

Bitbucket Server는 버전 5.5 이상부터 이 기능을 사용하도록 설정했습니다.

용도:

# Make remote with 4 commits, and local with just one.
mkdir server
cd server
git init
touch 1
git add 1
git commit -m 1
git clone ./ ../local
for i in {2..4}; do
    touch "$i"
    git add "$i"
    git commit -m "$i"
done

# Before last commit.
SHA3="$(git log --format='%H' --skip=1 -n1)"
# Last commit.
SHA4="$(git log --format='%H' -n1)"

# Failing control without feature.
cd ../local
# Does not give an error, but does not fetch either.
git fetch origin "$SHA3"
# Error.
git checkout "$SHA3"

# Enable the feature.
cd ../server
git config uploadpack.allowReachableSHA1InWant true

# Now it works.
cd ../local
git fetch origin "$SHA3"
git checkout "$SHA3"
# Error.
git checkout "$SHA4"

중앙 집중식 버전 제어 시스템과 달리 Git는 전체 저장소를 복제하므로 현재 원격 파일뿐만 아니라 전체 기록도 얻을 수 있습니다.로컬 리포지토리에 이 모든 내용이 포함됩니다.

당시 특정 버전을 표시하기 위한 태그가 있었을 수 있습니다.그렇지 않은 경우 로컬에서 직접 작성할 수 있습니다.이를 위한 좋은 방법은 다음과 같습니다.git log또는 아마도 같은 도구를 사용하여 더 시각적으로gitk(계속)gitk --all모든 분기 및 태그를 확인합니다.당시 사용된 커밋 해시를 찾을 수 있는 경우 다음을 사용하여 태그를 지정할 수 있습니다.git tag <hash>그런 다음 새 작업 복사본에서 확인합니다(예:git checkout -b new_branch_name tag_name또는 태그 이름 대신 해시를 직접 사용합니다.

다음과 같이 해결할 수 있습니다.

git reset --hard sha

sha 예:85a108ec5d8443626c690a84bc7901195d19c446

다음 명령을 사용하여 원하는 sha를 얻을 수 있습니다.

git log

필요한 소스 트리는 Git 저장소 내에서 계속 사용할 수 있지만 관심 있는 커밋의 SHA1이 필요합니다.현재 보유하고 있는 클론에서 SHA1을 얻을 수 있다고 생각합니다.

해당 SHA1을 가져올 수 있는 경우에는 분기를 생성하거나 동일한 저장소를 갖도록 재설정할 수 있습니다.

Rui의 답변에 따른 명령

ㅠㅠgit reset당신의 문제를 해결합니다.

git reset --hard -#commit hash-

언급URL : https://stackoverflow.com/questions/3555107/git-clone-particular-version-of-remote-repository

반응형