私の目標は、最新のバックアップがもはや有効でない場合にのみ、UIに「バックアップレポ」オプションを提供することです。そのため、レポに何らかの変更が加えられたかどうかを判断する効率的な方法が必要です。git repoに変更が加えられたかどうかを検出するにはどうすればよいですか?
私の最初の考えは、リポジトリ内のすべてのディレクトリの変更時刻を一緒にハッシュすることです。これは、バックアップで計算された同じ値と比較します。それは働くだろうか?より良い方法がありますか?
私の目標は、最新のバックアップがもはや有効でない場合にのみ、UIに「バックアップレポ」オプションを提供することです。そのため、レポに何らかの変更が加えられたかどうかを判断する効率的な方法が必要です。git repoに変更が加えられたかどうかを検出するにはどうすればよいですか?
私の最初の考えは、リポジトリ内のすべてのディレクトリの変更時刻を一緒にハッシュすることです。これは、バックアップで計算された同じ値と比較します。それは働くだろうか?より良い方法がありますか?
あなたは私の最初の考えは、私は同じ値と比較思われる、レポ内のすべてのディレクトリの変更時間を一緒にハッシュすることです...
git fetch --dry-run origin
...の出力を解析することができますバックアップで計算されます。それは働くだろうか?より良い方法がありますか?あなたは、サーバーからの保留中の変更があるかどうかを確認することができ
うん、:
# grab all latest changes
git fetch
# check to see if there are any changes
git diff <origin/branch> ^branch
# or
git diff ^<branch> origin/branch
一つは、別の方法があるプル用で、もう一つはプッシュ
のためでありますインタラクティブなrebase [スカッシュ]をしていないと仮定して、各ブランチのコミットの数を取得してtanします。
git rev-list --count
あなたが本当に自分のリモート追跡ブランチ起源/ブランチはローカルの追跡ブランチと同じであり、これだけSHAさんなどの(あなたをキャッチアップするために、マージに続いてのチェック(フェッチ後)かどうかを確認したいです)。だから、オリジナル/ブランチのrev-parseを行い、それをブランチのrev-parseと比較するかもしれません。なぜなら、コミットの数や何が変更されたのか、何が変更されたのか(またはgit log - オンラインの原点/ブランチ..ブランチはwc -lのようなものにパイプされています)。
ディレクトリ全体にわたるハッシュの考え方は、コミットのSHAが実際にどのように計算されるかと似ているので、SHAを使用するだけで実現できます。誰かがコミットしてから元に戻って同じ内容のものを手に入れた場合、私の提案は失敗します(SHAと同様にコミット情報も含まれているため)私はそのシナリオはありそうもないと思っていますが、最適化する必要はありません。
私のアプローチでは、リモートから複製するローカルリポジトリがあると仮定しています。そうでない場合、またはリモートリポジトリ全体をプルダウンしたくない場合は、浅いクローンを作成してヒントを取得し、そのヒントが以前のものだったことを覚えておくことができます。
ただし、より良いアプローチは、git ls-remote
を使用してその出力を解析し、その状態を覚えておいて、次に実行するときに比較します。
NAME
git-ls-remote - List references in a remote repository
SYNOPSIS
git ls-remote [--heads] [--tags] [--upload-pack=<exec>]
[--exit-code] <repository> [<refs>...]
DESCRIPTION
Displays references available in a remote repository along with the associated commit IDs.
次のような出力が表示されます。
From https://github.com/foobar/myRepo.git
3133d81f8cca51c73c92aeeaa1c762b177683456 HEAD
3133d81f8cca51c73c92aeeaa1c762b177683456 refs/heads/master
だから、あなたはそれがリモートの頭だけでなく、その参照文献及びそのを解析し、それを保存し、その単純な問題を示しています参照してください。
これまでの回答に関する2つのコメント:(1)リモートのレポがあるとは思わない。 (2)私はリポジトリ全体の内容に興味があります。管理されたファイルだけでなく、1つのブランチだけではありません。設定を変更したり、タグを追加したりすることは、バックアップを更新する必要があるため、変更と見なされます。明確にするために、私は頻繁に変更されない非常に大きなレポを扱っているため、通常の定期的な増分バックアップから除外しています。 –