7

作業していないリポジトリをコンピューターから削除するのが好きです。私は何かをチェックアウトし、それに取り組んでいます。終了したら、すべてをプッシュして、コンピューターからフォルダーを削除します。そうすれば、物事が整頓され、私が実際に取り組んでいることの概要を簡単に把握でき、プッシュされるのを待っている地元のものがないことがわかります。

だが...

ローカルリポジトリを削除する前に、すべてがリモートにプッシュされていることを確認したいと思います。私が行うプロセスは通常、次の3つのステップです。

git st    # check if there's something I haven't committed

git stash list    # check if I've stashed something

git log --oneline --decorate --all    # check if all branches have been pushed

これを単純化したいと思います。特に最後のステップでは、すべてのブランチを調べて、ローカルブランチとリモートブランチが同期しているかどうかを確認する必要があります。確かに、何かを見逃していないことを確認するために、少し下にスクロールする必要があるかもしれません。

これらすべてを自動的に実行するためのスクリプトを作成することを検討していますが、解決策はすでにあるのでしょうか。(私はこれをコマンドラインで実行し、派手なGUIを使用しないことを強調する必要はありません:D)

どうやってこれにアプローチしますか?あなたが何かを忘れていないことを確認するためのあなたのプロセスは何ですか?どのツールを使用していますか?すべてのアイデアは大歓迎です!

4

3 に答える 3

3

ダニエル・ヒルガースの答えに基づいて、次の手順をお勧めします

まず、git fetch --allすべてのアップストリーム リポジトリから最新の変更があることを確認するために実行します。

次にgit branch -vva- を実行します (二重の -v に注意してください)。これにより、すべてのブランチ ( a) が出力され、各ブランチの最新のコミットと、上流のブランチに関する情報 (上流が設定されている場合) が出力されます。

結果は次のようになります。

  br1                   88006cd Branch
  br2                   0b68b6f [origin/br2] New commit
  c                     9ed6569 Dummy
* master                f4664d4 [origin/master: ahead 1] my commit
  remotes/origin/HEAD   -> origin/master
  remotes/origin/br3    9ed6569 Dummy
  remotes/origin/master 9ed6569 Dummy

4 つのローカル ブランチ (master、c、br1、br2) があることがわかります。master と br2 には上流のブランチがあります。br2 は完全にプッシュされ、マスターにはまだプッシュされていないローカル コミットが 1 つあります ("ahead 1")。

br1 と c は、アップストリーム情報を持たないローカル ブランチです。これらについては、何をすべきかを確認して決定する必要があります。それらは完全にマージされており、冗長である可能性があります。または、それらを上流にプッシュしたい場合があります。または、それらをローカルでマージして、たとえば master にしてからプッシュすることもできます。ローカル マスターに完全にマージされていないブランチを表示するには、 を使用しますgit branch --no-merged master。この例では、これは "br1 br2" を出力します (ブランチ c が master の先祖であるため)。

最後に、br2 の上流ブランチ origin/br2 がリストされていることがわかりますが、これは存在しません。これは、リモート リポジトリがこのブランチを削除したことを意味します (そして、「git remote prune」または「git fetch -p」を使用してこの削除をフェッチしました)。ここでも、ローカル コミットを破棄するか、再プッシュまたはマージするかを決定する必要があります。

于 2013-02-14T14:35:01.487 に答える
0

リポジトリを繰り返し削除するのは悪いことです。たとえば、Linux リポジトリは 126 MBですそれがどのようにすぐに古くなるかがわかります。おそらく、このスクリプトが役立つでしょう。ディレクトリ内のすべてのフォルダー (この場合は/opt) をチェックし、git statusそれぞれのフォルダーを提供します。

#!/bin/sh
warn ()
{
  printf '\e[1;35m%s\e[m\n' "$*"
}
c ()
{
  printf '\ec'
}
compgen -d /opt/ | while read k
do
  c
  cd $k
  git status
  warn $k
  read </dev/tty
done
于 2013-02-14T10:52:58.367 に答える