1. ホーム
  2. Web プログラミング
  3. その他全般

Git.gitignore開発必携アドバイス集

2022-01-02 04:53:50

.gitignoreファイルは、gitでプロジェクトを管理する際の必需品なので、ここで少し詳しく説明します!

I. なぜ.gitignoreを使うのか?

プロジェクトによっては、ローカルリポジトリからすべてのファイルをリモートリポジトリにアップロードするのではなく、例えば、いくつかの依存関係(node_modulesの下の依存関係)、binディレクトリの下のファイル、テストファイルなど、選択的にアップロードしたいことがあります。一方では、すべての依存関係やテストファイルをリモートにアップロードすることは大きな転送であり、他方では、例えば、ローカルの設定ファイルなど、自分側では利用できるファイルでも、他の人には利用できないものがあります。

これらの問題を解決するために、gitは.gitignoreファイルを導入し、それを使って選択的にファイルをアップロードすることができます。

II. 使用上のルール

2.1 コメント

コメントは#で始まり、コメントの内容が続きます。これは以下のように表示されます。

linuxy@linuxy:~/linuxGit$ cat .gitignore 
# This is the .gitignore file.
# The following files are ignored
out
*.exe
linuxy@linuxy:~/linuxGit$

上記の例では、コメントは#で始まっています。

2.2 ドキュメントを無視する

(1) ファイルとディレクトリを無視する

例:folderName : folderNameファイルとfolderNameディレクトリを無視することを意味し、例えば、自動的に複数レベルのディレクトリを検索します。例:*/*/folderName.

簡単な例として、ローカルリポジトリのディレクトリ構造を以下に示します。

linuxy@linuxy:~/linuxGit$ tree
.
├── folder
│ └── file1
└── src
    ├── folder
    └─ utils
        └── folder
 
3 directories, 3 files
linuxy@linuxy:~/linuxGit$

.gitignoreファイルが以下のように読み取れるところ。

linuxy@linuxy:~/linuxGit$ cat .gitignore 
# This is the .gitignore file.
# The following files are ignored
 
folder
linuxy@linuxy:~/linuxGit$ 

したがって、同じ名前のフォルダディレクトリ、src/folder ファイル、および src/utils/folder ファイルはローカルリポジトリでは無視されます、つまり、それらはリモートリポジトリにコミットされません。

(2) ファイルのみ無視する

以下にそのパターンを示す。

folderName
 
!folderName/

感嘆符 "!" が逆の操作を示す folderName ディレクトリではなく、folderName ファイルのみを無視します。

簡単な例を見るために、ローカルリポジトリのディレクトリ構造を以下に示します。

linuxy@linuxy:~/linuxGit$ tree
.
├── folder
│ └── file1
└── src
    ├── folder
    └─ utils
        └── folder
 
3 directories, 3 files
linuxy@linuxy:~/linuxGit$

.gitignoreファイルが以下のように読み取れるところ。

linuxy@linuxy:~/linuxGit$ cat .gitignore 
# This is the .gitignore file.
# The following files are ignored
 
folder
!folder/
linuxy@linuxy:~/linuxGit$

したがって、ローカルリポジトリでは、src/folder ファイルと src/utils/folder ファイルは無視されますが、同じ名前のフォルダディレクトリは無視されません。

2.3 ディレクトリを無視する

スキーマは以下のとおりです。

folderName/

folderName ディレクトリを含む、無視する。

(1)カレントディレクトリのfolderName、例:folderName/。

(2) 複数階層のディレクトリにおけるfolderName、例:*/*/folderName/.

簡単な例を見るために、ローカルリポジトリのディレクトリ構造を以下に示します。

linuxy@linuxy:~/linuxGit$ tree
.
├── folder
│ └── file1
└── src
    ├── folder
    └─ utils
        └── folder
 
3 directories, 3 files
linuxy@linuxy:~/linuxGit$

.gitignoreファイルが以下のように読み取れるところ。

linuxy@linuxy:~/linuxGit$ cat .gitignore 
# This is the .gitignore file.
# The following files are ignored
 
folder/
linuxy@linuxy:~/linuxGit$

したがって、ローカルリポジトリではフォルダディレクトリは無視されますが、同名の src/folder ファイルと src/utils/folder ファイルは無視されません。

2.4 ワイルドカードの使用

よく使われるワイルドカードは

(1) アスタリスク "*":複数の文字にマッチします。

(2) クエスチョンマーク "?" : '/' 以外の任意の文字にマッチします。

(3) 角括弧 "[xxxx]":リスト内の複数文字にマッチします。

簡単な例を見るために、ローカルリポジトリのディレクトリ構造を以下に示します。

linuxy@linuxy:~/linuxGit$ tree
.
├── src
│ ├── add.c
│ ├── add.i
│ └── add.o
├─ test.c
├─ test.i
└─ test.o
 
1 directory, 6 files
linuxy@linuxy:~/linuxGit$

.gitignoreファイルが以下のように読み取れるところ。

linuxy@linuxy:~/linuxGit$ cat .gitignore 
# This is the .gitignore file.
# Here are the files that are ignored
 
*. [io]
linuxy@linuxy:~/linuxGit$

したがって、ローカルリポジトリでは、test.i ファイル、test.o ファイル、src/add.o ファイル、および src/add.i ファイルは無視され、test.c ファイルと add.c ファイルは無視されないことになります。注:ここで無視されるマッチパターンは、多階層ディレクトリの場合です。

2.5 逆方向の操作

そのモデルを以下に示します。

! Matching patterns 

以前に無視されたマッチパターンが再びトレース内容に含まれることを示す。

例えば、ドキュメントのみを無視する場合に記載されたパターン。

folderName
 
!folderName/

folderNameファイルのみを無視し、folderNameディレクトリは無視しないことを示す。

2.6 ダブルアスタリスク

スラッシュの直後に2つ連続したアスタリスク "**"を付けると、複数階層のディレクトリであることを示します。

簡単な例として、.gitignore ファイルの中身は次のようになります。

linuxy@linuxy:~/linuxGit$ cat .gitignore 
# This is the .gitignore file.
# Here are the files that are ignored
 
src/**/file
linuxy@linuxy:~/linuxGit$

2.7 その他のルール

(1)空行はどの文書にもマッチしない。

(2) git はディレクトリではなく、ファイルを追跡します。

(3) .gitignoreファイルの各行は、パターンを表します。

(4) ローカルリポジトリのファイルがすでに追跡されている場合は、.gitignore に ignore が設定されていても動作しません。

(5) .gitignore ファイルはリモートリポジトリにもアップロードされるので、同じリポジトリにいる人は同じ .gitignore ファイルを使うことができます。

III. 概要

gitを使用する場合、リモートへの不要なファイルのアップロードを減らすために、.gitignoreの使い方をマスターすることが重要です。

Git.gitignoreに関するこの記事は、開発のための提案集として必見です。