pygit2 を使用してリモートから変更をプルして統合する場合、最後のステップは、Repository.checkout()
またはを使用してチェックアウトすることRepository.checkout_head()
です。どちらを使用しますか?
これらは両方とも、引数としてチェックアウト戦略を取ります。現在、GIT_CHECKOUT_SAFE、GIT_CHECKOUT_SAFE_CREATE、GIT_CHECKOUT_FORCEなど
をチェックアウトするための戦略がいくつかあります。
私が直面している問題は、インデックス ファイルをチェックアウトした後でも、ステージングされたファイルがいくつか変更されていることです。
r.repo.status()
{'README.md': 2}
戦略 GIT_CHECKOUT_FORCE を使用すると、インデックスは空になり、コミットも保存されます。
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()
{}
注: これは、 pygit2 を使用して変更をプルおよび統合するためのフォローアップの質問であり、別の質問はこちら