回答:
試してください:
git ls-files --error-unmatch <file name>
ファイルが追跡されていない場合、1で終了します
--error-unmatch
オプションを付ける必要があります。どういうわけか、オプションはそれに続くファイル名にのみ適用されます。
--
)表示される場合、ファイル名--error-unmatch
は別の(インデックスではない)ファイル名として扱われ、効果がないことです。
git ls-files | grep <PATTERN>
?例:git ls-files | grep Main.h
エラーメッセージがコンソールに表示されたくない場合は、次のコマンドを実行することもできます。
git ls-files file_name
そして結果を確認します。gitが何も返さない場合、ファイルは追跡されません。追跡されている場合、gitはファイルパスを返します。
これは、PowerShellなどのスクリプトで組み合わせたい場合に便利です。
$gitResult = (git ls-files $_) | out-string
if ($gitResult.length -ne 0)
{
## do stuff with the tracked file
}
file_name
ニーズが完全に一致する(フルパス+ファイル名)であることを、しかし、ワイルドカードを使用することができます:git ls-files *foo.rb
編集
bashからgitを使用する必要がある場合は、次の--porcelain
オプションがありますgit status
。
- 磁器
スクリプト用の安定した、解析しやすい形式で出力を提供します。現在、これは--short出力と同じですが、将来変更されないことが保証されているため、スクリプトに対して安全です。
出力は次のようになります。
> git status --porcelain
M starthudson.sh
?? bla
または、一度に1つのファイルのみを実行する場合:
> git status --porcelain bla
?? bla
元の
行う:
git status
更新されたファイルと追跡されていないファイルを示すレポートが表示されます。
bla.sh
追跡および変更されており、追跡されてnewbla
いないことがわかります。
# On branch master
# Changed but not updated:
# (use "git add <file>..." to update what will be committed)
#
# modified: bla.sh
#
# Untracked files:
# (use "git add <file>..." to include in what will be committed)
#
# newbla
no changes added to commit (use "git add" and/or "git commit -a")
git status --porcelain
スクリプトで出力を解析する必要がある場合は、あなたの友達です。リンクされたドキュメントを参照してください。他のいくつかの便利なオプションが表示されます
git status --porcelain error: unknown option
磁器バージョンは1.6.0です:-)
git status
ファイルで実行してみてください。gitで追跡されていない場合はエラーが出力されます
PS$> git status foo.txt
error: pathspec 'foo.txt' did not match any file(s) known to git.
git status trackedfile
と、終了コード1(有用であると予想される0)が表示されますが、出力に「エラー:」が表示されません。文字列出力ではなく、終了コードを解析したい。
.gitignore
$ git status notthere
:On branch master nothing to commit, working directory clean
私はあなたにカスタムエイリアスを提案します.gitconfig
。
あなたがする方法があります:
1)gitコマンドで:
git config --global alias.check-file <command>
2)~/.gitconfig
この行を編集してエイリアスセクションに追加します。
[alias]
check-file = "!f() { if [ $# -eq 0 ]; then echo 'Filename missing!'; else tracked=$(git ls-files ${1}); if [[ -z ${tracked} ]]; then echo 'File not tracked'; else echo 'File tracked'; fi; fi; }; f"
コマンド(1)または保存済みファイル(2)を起動したら、ワークスペースでテストできます。
$ git check-file
$ Filename missing
$ git check-file README.md
$ File tracked
$ git check-file foo
$ File not tracked
使用git log
すると、これに関する情報が得られます。ファイルがgitで追跡されている場合、コマンドはいくつかの結果(ログ)を表示します。そうでなければ、それは空です。
たとえば、ファイルがgit trackedの場合、
root@user-ubuntu:~/project-repo-directory# git log src/../somefile.js
commit ad9180b772d5c64dcd79a6cbb9487bd2ef08cbfc
Author: User <someone@somedomain.com>
Date: Mon Feb 20 07:45:04 2017 -0600
fix eslint indentation errors
....
....
ファイルがGit追跡されていない場合、
root@user-ubuntu:~/project-repo-directory# git log src/../somefile.js
root@user-ubuntu:~/project-repo-directory#
ちょうど私の2セント:
git ls-files | grep -x relative/path
オートコンプリートシェル内relative/path
を押すと、どこにあるかを簡単に判断できますtab
。を追加| wc -l
して、1または0の出力を取得します。
grep
オプションを追加する必要があります--fixed-strings
。