特定のファイルを無視するのではなく、特定のファイルのみを含めるようにgitに指示する方法はありますか?


165

私のプログラムは通常、巨大な出力ファイル(〜1 GB)を生成しますが、これをgitリポジトリにバックアップしたくありません。だからできる代わりに

git add .

私は何かをしなければなりません

git add *.c *.cc *.f *.F *.C *.h *.cu

少し面倒です...

迅速なperlスクリプトでディレクトリの内容を.gitignoreに書き込み、.gitinclude(または類似の名前)ファイルに基づいてファイルを削除できると確信していますが、少しハックしすぎるようです。もっと良い方法はありますか?

回答:


230

私はこれを自分で試す必要はありませんでしたが、TFMを読んでみると、否定されたパターンがあなたが望むことをするように見えます。.gitignoreのエントリを後で否定されたエントリで上書きできます。したがって、次のようなことができます。

*.c
!frob_*.c
!custom.c

custom.cと "frob_"で始まるすべてを除くすべての.cファイルを無視するには


20
ありがとう、TEDこれはうまくいきました。私がしなければならなかったのは、*で.gitignoreファイルを開始し、次に感嘆符で始まるすべてのインクルードファイルパターンをリストすることだけでした。
デイジーソフィアホルマン

8
フォルダはどうですか?ルールを否定してフォルダやファイルを含める方法が見つかりません。
Marcio Cruz

4
フォルダーについては、stackoverflow.com
questions / 12799855 /…

2
非常に素晴らしい。私はのvimrcとbashrcにのようなもののための私のホームフォルダ内のリポジトリには、このを使用しています
マーティンCapodici

1
特定のフォルダを1つ含めたい場合、@ uzsoltは機能しません。stackoverflow.com/questions/987142/…を
DiCaprio

73

リポジトリに.gitignoreファイルを作成し、cファイルのみを追跡して他のすべてのファイルを無視したい場合は、次の行を追加します。

*
!*.c

「*」はすべてのファイルを無視します

そして!ファイルを無視することは無視されます....だから、ここではgitにcファイルを無視しないように要求しています...


.*隠しファイルも必要ですか?
trusktr 2013年

2
*でものためにワイルドカードである.ので、隠された、ファイルも無視されますが、その後で終わるすべての隠されたファイルが.c含まれています。
ローマー2014

2
この方法を使用すると、サブフォルダーのファイルも無視されると思います。詳細については、このチェックをstackoverflow.com/a/11853075/739436
Stelian

1
私のホームディレクトリでこのメソッドを使用して、.bashrcと.bash_historyのみを追跡しました。たとえば 、.gitignoreファイルで*追跡し !.bash*ました
user5359531

1
*.*Windowsで必要になる場合があります-@Smaranjit Maitiによる回答をご覧ください
Martin Capodici 2017

13

これを達成するための最良のソリューション

.gitignoreリポジトリrootにファイルを作成し、ファイルのみを含める場合は、.cファイルに以下の行を追加する必要があり.gitignoreます

*.*
!*.c

これには.c、ディレクトリとサブディレクトリのすべてのファイルが再帰的に含まれます。

を使用して

*
!*.c

すべてのバージョンのgitでは機能しません。

テスト済み

gitバージョン2.12.2.windows.2


2
はい、私はと同じ問題があり*、使用しなければなりませんでした*.*。これはgitbashとgitバージョン2.9.0.windows.1を使用するWindows上にあります
Martin Capodici

2

ディレクトリ内の特定のファイルではなくファイルを無視する必要がある場合は、次のようにしました。

# Ignore everything under "directory"
directory/*
# But don't ignore "another_directory"
!directory/another_directory
# But ignore everything under "another_directory"
directory/another_directory/*
# But don't ignore "file_to_be_staged.txt"
!directory/another_directory/file_to_be_staged.txt

0

パーティーには遅れますが、私の解決策は、ソースファイル用のディレクトリと、実行可能ファイルとプログラム出力用の別のディレクトリを用意することです。

+ .git
|    (...)
+ bin
|    my_exe.exe
|    my_output.txt
+ src
     some_file.c
     some_file.h 

...そして、src/私のものをリポジトリに追加するだけで、bin/完全に無視します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.