web-dev-qa-db-ja.com

typechangeステータスのGitリセットファイル

大規模なリポジトリ全体を検索して置換すると、typechangeステータスのファイルがたくさん表示されます。これらは主にシンボリックリンクです。

のではなく

git checkout -- eachfile.name

Typechangeファイルのみをリセットする方法はありますか?

20
iphipps
git status | grep typechange | awk '{print $2}' | xargs git checkout
44
muzz

既存の答えの味ですが、私はそれを好みます:

git status --porcelain | awk '{if ($1=="T") print $2}' | xargs git checkout

--porcelainは、この種の使用のために設計されています。

このawkの回答と既存の回答は、スペース、改行などを含むファイル名で壊れている可能性があることに注意してください。

git status -z | Perl -0 -ne 'print $1 if /^\s*T\s*(.+)$/s' | xargs -0 git checkout

git status -zreallyがこの種の使用に推奨されるもので、nullは各エントリを終了します。 Perlの-0はそれを扱います、-neは、指定されたコマンドを各行に処理します(実際には「エントリ」)。 $1は、ここで最初のキャプチャグループを参照します。これには、ファイル名とnullターミネーターが含まれます。

2
zzxyz

ほとんどの場合、リポジトリからシンボリックリンクを削除することをお勧めします。異なるオペレーティングシステムで作業している場合、リポジトリにリンクがあることが問題になります。

それを削除して新しい場所に設定すると、ファイルが変更されます。

一部のJava Gitクライアントにシンボリックリンクの問題があります。シンボリックリンクを追跡しようとすると、エラーが発生します。Jenkinsクライアントでこの問題が発生しました。

すべてのシンボリックリンクを.gitignoreに追加するには、Linuxで次のコマンドを実行します。

find /your/directory -type l >> .gitignore

1
René Höhle