with pygit2 인 경우 마지막 단계는 Repository.checkout()
또는 Repository.checkout_head()
을 사용하여 계산하는 것입니다. 어떤 것을 사용합니까?pygit2의 Repository.checkout()과 Repository.checkout_head()의 차이점은 무엇입니까?
이 두 가지 모두 인수 전략으로 사용됩니다. 이제 GIT_CHECKOUT_SAFE, GIT_CHECKOUT_SAFE_CREATE, GIT_CHECKOUT_FORCE를 확인하기위한 몇 가지 전략이 있습니다. etc.
내가 직면하고있는 문제는 인덱스 파일을 체크 아웃 한 후에도 파일이 수정된다는 것입니다. 즉, 몇 개의 파일이 준비되어 있습니다.
GIT_CHECKOUT_FORCE는 인덱스 전략을 사용하여 빈과 커밋이다 또한 저장됩니다.r.repo.status()
{ 'README.md는': 2}
GIT_CHECKOUT_FORCE 전략을 사용해야하는시기는 언제입니까?
다음은 프로세스의 단계별 코드입니다.
r.repo
은 리포지토리 개체입니다. remo
이름 ssh-sansa
>>> r.repo.status()
{}
>>> z = remo.fetch()
>>> remoref = r.repo.lookup_reference('refs/remotes/ssh-sansa/master')
>>> rref = r.repo.lookup_reference(r.ref)
>>> r.ref
'refs/heads/master'
>>> remoref.target.hex
'23aac24f65c775d0524095d422133c63caf3826a'
>>> rref.target.hex
'29f5f99722e9c93a58ec085a55c6a4814c4adffb'
>>> rref.target=remoref.target.hex
>>> rref.target.hex
'23aac24f65c775d0524095d422133c63caf3826a'
>>> r.repo.status()
{'README.md': 2}
>>> r.repo.checkout_head(repo_.pygit2.GIT_CHECKOUT_SAFE_CREATE)
>>> r.repo.status()
{'README.md': 2}
>>> r.repo.checkout('HEAD',strategy=repo_.pygit2.GIT_CHECKOUT_SAFE_CREATE)
>>> r.repo.status()
{'README.md': 2}
>>> r.repo.checkout('HEAD',strategy=repo_.pygit2.GIT_CHECKOUT_FORCE)
>>> r.repo.status()
{}
참고로 원격 :이 차이가 없습니다 pulling and integrating changes using pygit2 및 another question here
'Reference.target = '이후 커밋 히스토리가 변경되었습니다 (이제는 커밋이 너무 커지기도하고 리모트에서 변경된 내용이 파일에 나타납니다). 변경 사항이 손실됩니까? – avck
** libgit2에서 checkout은 대상 트리와 일치하도록 작업 디렉토리와 색인을 업데이트하는 데 사용됩니다. ** 원격에서 당긴 후 대상 트리는 무엇이 될까요? – avck
잃어버린 변경 사항은 상태가 당신에게 말하는 README.txt입니다. 현재 브랜치를 변경하는 것은 정상적인 (이 경우 상태가 더 이상 동의하지 않음) 및 무언가가 실패 할 경우 쉽게 롤백 할 수있는 ** 마지막 ** 작업입니다. –