非常に一般的なシナリオ:
裸のリポジトリがあります。開発者がgit push
ローカル マシンからbare
レポに移動し、別の開発者が実行git pull
すると、ローカル バージョンのアプリケーション (含まれるファイル) が更新されます。
ただし、ときどき、 で直接 (ホストなどによって) 変更が行われるremote working tree
と、ローカル マシンに異なるファイル バージョンが存在することになり、remote working tree
get は常に古くなっています。
これによれば:
https://git.wiki.kernel.org/index.php/GitFaq#non-bare
プッシュ操作は、常にリポジトリ履歴の伝播と参照の更新に関するものであり、作業ツリー ファイルには決して触れません。特に、リモート リポジトリでチェックアウトされているブランチをプッシュして更新すると、作業ツリー内のファイルは更新されません。
checked out in a remote repository
意味がわかりません。git checkout whatever
sshをリモートで使用してブランチを切り替えることはしませんでした(それが意味する場合)。
とにかく、git push を実行すると、作業ツリー ファイルは変更されません。Ok。
したがって、これを解決するには:
何をしているのか確信がある場合は、プッシュした側で「git reset --hard」を実行できます。これにより、その側で行ったすべての変更が失われ、作業ツリーがプッシュした最新のリビジョンにリセットされることに注意してください。
「git リセット --hard」
私はこれをしましたが、何も変わりませんでした。それは言います:
HEAD is now at 45d948a Merge branch 'dev' of /home/blabla/private/repos/blabla_hub into dev
しかし、何も変わっていません。
1) すべての開発者がベア (作業ツリーなし) リポジトリをプッシュおよびプルするだけの場合、どのように作業ツリーを更新しますか? (ファイルはどこに渡されますか?)
remote working tree
2)期待どおりに更新されなかったのはなぜですか?
私の質問は明確ですか?ご意見をお聞かせください。
アップデート
私は dev と master ブランチを使用しています。それとは別に、ローカルとリモートの両方で、次のスキーマを使用しています。
このシステムの重要なアイデアは、Web サイトが 1 対のリポジトリとしてサーバー上に存在するということです。ライブサイトを含む従来のリポジトリと並んでベアリポジトリ。2 つの単純な Git フックがペアをリンクし、それらの間で変更を自動的にプッシュおよびプルします。
2 つのリポジトリ:
Hub is a bare repository. All other repositories will be cloned from this. Prime is a standard repository, the live web site is served from its working directory.
リポジトリのペアを使用するのは簡単で柔軟です。ssh アクセスを使用したリモート クローンは、ハブへの単純な git プッシュでライブ サイトを更新できます。サーバー上で直接編集されたファイルは、コミット時に即座に Hub にミラーリングされます。