.gitignoreファイルとは何ですか?そして、それをどのように設定しますか?
.gitignoreファイルは、特定のファイルやフォルダーを追跡しないようにgitに指示する、あなたのgitリポジトリに置かれるテキストファイルです。これにより、マスターリポジトリにアップロードしたくないファイルやフォルダーが無視されます。さまざまな用途があり、新しいリポジトリを設定する際にはほとんど必ず設定する必要があります。
.gitignoreの目的は何ですか?
ほとんどのプロジェクトでは、コードや設定と、そのコードや設定から生成されたファイルの間に違いがあります。後者は通常役に立たず、一般的には無視されることができます。
通常、コードと設定のみをgitで追跡したいと思います。これは、生成されたファイルが一時的であり、削除しても再生成できるからです。アップロードする意味はほとんどなく、単に事態を複雑にし、不必要なマージコンフリクトを引き起こすだけです。
これは広い定義ですので、例を見てみましょう。Node JSプロジェクトでは、「というフォルダーがあります。
node_modules
あなたのコードが実行するために必要なすべての外部パッケージが含まれているディレクトリです。このディレクトリを削除し、実行することで完全に再構築できます。
npm install、それは使用します
package.jsonパッケージを検索するための設定。
それで、持っている意味は何ですか?
node_modulesGitのフォルダーですか?実際にはそれは存在しません。というのも、より複雑で、問題を引き起こす可能性があり、多くの場合、Gitリポジトリのサイズを劇的に増加させることさえあります。
ディレクトリ全体を無視しても、同僚全員が自分のローカルコピーを生成することができます。
package.jsonファイル。それで、代わりに、ただ
package.jsonGitで追跡されるべきです。.gitignoreに追加されるほとんどのものはこのパターンに従います。ビルド成果物、例えば
./bin/フォルダーは、コード自体の直接的な結果であるため、コミットしないでください。
便利のために他のものも.gitignoreに追加できます。MacOSはシステムファイルを生成します。
.DS_store
無視しても構わないでしょう。おそらく、あなたはAPIキーを保存しています。
.env/ソースコントロールで追跡されたくないものがあれば、それらも追加できます。キャッシュ、ログ、その他の出力は通常無視できます。
.gitignoreを使用する
プロジェクトのルートに、拡張子なしで.gitignoreという名前のファイルを作成する必要があります。
.gitディレクトリが所在します。これをファイルブラウザーから、または任意のCLIテキストエディターを使用してコマンドラインから行うことができます:
nano .gitignoreこれを多くの方法で設定できますが、主なツールは次のとおりです:
- ワイルドカード * は、任意のテキストと一致し、任意のディレクトリや拡張子に関係なく任意のファイルと一致するために使用できます。
- これは、一種のホワイトリストとして機能し、以前に除外されたファイルを無効にする「!」です。この点での主な注意点は、ファイルが直接除外された場合にのみホワイトリストに登録され、完全に除外されたディレクトリ内のファイルには適用されないことです。
**は、ディレクトリ内のすべてのものを再帰的に一致させます。例えば、**/*.jsonは、JSONファイルがどこにあっても一致しますし、src/**は、フォルダー内のすべてのファイルに再帰的に一致します。これは、ディレクトリ全体を無視せずにホワイトリストにしたいときに便利です。
例えば、Node JSのgitignoreは次のようになるかもしれません:
node_modules/
build/
npm-debug.log
.env
.env.test
.env.production
.DS_Store
.npm
.eslintcache
logs/
*.log
npm-debug.log*
!を使ってファイルをホワイトリストに追加することは、多くの設定で非常に便利です。例えば、私のプロジェクトの一つには、ゲームサーバーの依存関係をSteamからダウンロードするツールであるsteamcmdがありました。このツールは単一のポータブル実行可能ファイルとしてパッケージされていますが、私がGitで追跡したくない大量のジャンクを生成します。
解決策は、フォルダー内のすべてを無視し、実行可能ファイルをホワイトリストに登録することでした。これにより、このように展開するポータブル実行可能ファイルや、ディレクトリ内に不要なゴミを生成するものに対しても機能します。
Project/steamcmd/**
!Project/steamcmd/steamcmd.exe
gitignoreは、文字列の一致のためにクエスチョンマークや[a-z]のような他のUnixのグロビングパターンも使用します。クエスチョンマークは単一の文字と一致し、[a-z]は文字のセットと一致します。
複数の .gitignore ファイルを書くこともでき、それぞれが自分自身に対して相対的にファイルをマッチさせることができます。これは、ルートファイルにルールを含めることができるため、追跡が簡単なので、あまり役に立たないかもしれませんが、場合によってはコードの繰り返しを助けることができます。しかし、回避策は、キャラクターセットを使用して複数のディレクトリにマッチさせることです。たとえば、大文字と小文字のディレクトリをセットでマッチさせることです:
Build results
[Dd]ebug/
[Dd]ebugPublic/
[Rr]elease/
[Rr]eleases/
もしあなたが.gitignoreの設定に問題を抱えているなら、check-ignoreというGitコマンドを使ってデバッグできます:
git check-ignore -v testfile.jsonグローバル.gitignore
Gitには、.gitignoreのグローバル設定もありますが、ほとんどの場合は使用すべきではありません。これは、コンピュータ上のグローバル.gitignoreはあなたの同僚には適用されず、あなたのGitインスタンスで行われたコミットのみに適用されるためです。
もしそれを設定したい場合は、以下のコマンドでできます。
git config --global core.excludesfile ~/.globalignore無視されたファイルを強制的にコミットまたはスタッシュする
強制コミットは一般的に悪いアイデアです --- この特定のファイルのホワイトリストを追加する方がいいでしょう。なぜなら、一度コミットされると、このファイルの更新は追跡されなくなるからです。しかし、何かを手動でコミットしたい場合は、git addを--forceパラメータとともに実行できます:
git add -f debug.log同様に、git stash は無視されたファイルに対するローカルの変更も一時的に保存でき、実際に便利です。なぜなら、それはリモートリポジトリには影響しないからです。
git stash --all
