1

git と bash スクリプトを使用してコードの回帰テストを実行しようとしています。そのため、現在のバージョンと以前のバージョンでサンプルを実行するスクリプトを作成しました。ソースファイルは「src」ディレクトリにあり、サンプルは別の「samples」ディレクトリにあります。「src」ディレクトリと「samples」ディレクトリの両方が、同じプロジェクトの下で git によって追跡されます。

「src」ファイルのみをロールバックし、「samples」には touch ファイルをロールバックしたくありません。git reset と git checkout を試しました。

問題:ターミナルで「src」に移動して次のように入力すると:

git checkout -- *.F90

このディレクトリ内の Fortran ファイルのみを変更します。

bash スクリプトで同じコマンドを実行すると、ファイル "src" と "samples" のすべてが変更されます。「git checkout」または「git reset origin/master」のように、メインディレクトリから実行された場合のように...どうすればよいでしょうか?

どこかで、スクリプトで「env -i」を使用するという提案を見つけましたが、それも機能しませんでした。

スクリプト全体は約 500 行で、git 関連の部分は次のとおりです。

cd $dsrc                   # go to src directory
ls                         # debuging, just to see , that I am there
git stash
git checkout origin/master -- *.F90

ls コマンドを使用すると、ソース ファイルが表示されます。適切な場所にいます。

何か案は?

4

1 に答える 1

1

「pathspec」のGit用語集から:

[...] 特に、*ディレクトリの区切り記号に一致さ? せることができます。

したがって、あらゆる場所のすべてのファイル*.F90に一致します。.F90現在のディレクトリに制限するには、次を使用できます

git checkout origin/master -- "$PWD"/*.F90

(コメントでtorekが指摘したように) マニュアルはGitの機能に言及していることに注意してください。シェルが最初にグロブを展開できる場合、たとえば現在のディレクトリに一致するファイルがある場合は展開ます*.F90

何もない場合にのみ、Git は展開されていないリテラルを取得し、 を含む任意のプレフィックス*.F90と一致させます。シェルによる拡張を防ぐには、グロブを引用できます。*/

git checkout origin/master -- "$PWD/*.F90"

またはパススペックで使用.します:

git checkout origin/master -- ./*.F90
于 2021-03-04T17:34:50.053 に答える