0

ユーザーの介入なしで Git チェックアウトの成功を保証するスクリプトを書きたいと思います。ユーザーの介入なしでは解決できないものをダンプしても構いません。たとえば、コミットされていない変更などです。明示的に無視されたファイルを保持したいのですが (これらは「バージョン管理下」にあると考えています)。

Git でステージングされていない変更をどのように破棄しますか?への豊富な回答に基づいてスクリプトを作成しました。時間の経過とともに発生したエラーを修正します( git --reset hardおよびIgnoring "Your local changes to the following files would be overwrite by merge" on pull の後に残ったステージングされていない変更と似ていますが、まったく同じではありません)。

私は今、断片的なスクリプトに冗長性が含まれているか、短縮されている可能性があることを懸念しています. 次の呼び出しのいずれかが冗長ですか?

cd /SOME/FOLDER
git clean -df & git checkout .
git stash
git stash clear
git checkout SOME-BRANCH # or git checkout -B SOME-REMOTE SOME-BRANCH [1]
# possibly followed by a manual call to: git pull --rebase SOME-REMOTE

[1] これらの呼び出しはgit checkout -fおよびgit checkout -fBでしょうか?

4

1 に答える 1

1

クリーンなチェックアウトを作成するために、ビルド スクリプトの 1 つで使用するものを次に示しますHEAD(任意のブランチまたはコミットに置き換えるHEADか、シェル変数を使用します)。

if [ $(git status --porcelain -uall | wc -l) -gt 0 ]; then
  echo "Creating pristine checkout of HEAD."
  git reset --quiet --hard HEAD
  git clean --quiet -fd
fi

このif句は、何かする必要があるかどうかをチェックします。効率がわずかに向上する可能性がある (またはもたらされない可能性がある) ことを気にしない場合は、省略できます。

無視ルール (.gitignoreファイル) にあるファイルも削除する場合は、-xオプションをに指定git-cleanし、--ignoredオプションをgit-status;に指定する必要があります。あなたはそれが起こりたくないと言った。

あなたが行う他の呼び出しは必要ないと思います。スタッシュをクリアする必要はありません (ただし、害はありません)。

于 2014-05-06T12:34:51.847 に答える