0

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 を使用して変更をプルおよび統合するためのフォローアップの質問であり、別の質問はこちら

4

1 に答える 1

0

違いはありません。refnameにof'HEAD'を渡すRepository.checkout()と、 が呼び出されますRepository.checkout_head()

ファイルが変更されたままになる理由は、ライブラリに変更を上書きしないように指示したためです。各戦略の機能の説明については、戦略ドキュメントを参照してください。具体的には、

それらの間に GIT_CHECKOUT_SAFE と GIT_CHECKOUT_SAFE_CREATE があり、どちらも変更を失わない変更のみを行います。

ファイルが変更されているため、上書きすると変更が失われるため、拒否されます。上書きする場合は、ファイルを使用するFORCEか、ファイルが変更された状態にならないようにします。

于 2014-07-11T11:19:00.820 に答える