新しいprojectをGit管理するなら、対象directoryでgit init -b mainを実行し、最初のgit addより前に.gitignoreを用意します。既存remote projectへ参加する場合はgit initではなくgit cloneを使います。
この記事では、commit作成者の設定、repository初期化、除外file、最初のcommitまでを順に進めます。日常commandはGitの基本コマンド、GitHubとの役割の違いはGitHubとは何かを参照してください。
Gitのuser.nameとuser.emailは何の設定か
user.nameとuser.emailはcommitへ記録する作成者情報です。GitHubへのloginやremote accessを自動設定するものではありません。
git config --global user.name "Your Name"
git config --global user.email "you@example.test"
git config --global --get user.name
git config --global --get user.email
--globalは利用者単位のdefaultです。仕事用と個人用などrepositoryごとに変える場合は、対象repository内で--local設定を使い、git config --show-origin --get user.emailでどの設定fileから読まれたか確認します。
新しいrepositoryをgit initで作る手順
既存のlocal directoryを新しく履歴管理するときだけgit initを使います。実行場所を間違えると想定外の広いdirectoryを管理対象にするため、先に現在地とfile一覧を確認します。
- project rootへ移動する。
- 現在pathとfileを確認する。
git init -b mainでrepositoryを作る。.gitignoreを作る。git statusで対象を確認する。- 必要なfileだけstageし、最初のcommitを作る。
cd path/to/project
pwd
git init -b main
git status
-b mainで初期branch名を指定できます。組織に別の命名規則がある場合はその契約を優先します。
既存projectはgit cloneから始める
GitHubなどに既存repositoryがある場合は、空のdirectoryでgit initして手動接続するよりgit cloneを使います。履歴、remote設定、default branchの情報をまとめて取得できます。
git clone https://github.com/example/project.git
cd project
git remote -v
git status
private repositoryでは認証方法が別に必要です。user.nameとuser.emailを設定してもcloneやpushの認証は完了しません。HTTPS credential、SSH key、organization policyなど、利用先の案内に従います。
.gitignoreは何を除外するfileか
.gitignoreは、まだ追跡していないfileを通常のgit statusやgit addの対象から除外するpattern集です。生成物、dependency、local設定、cacheなど、repositoryで共有しないものを記載します。git initの直後、最初のgit addより前にproject rootへ置くのが基本です。
.gitignore自体はcommitしてteamで共有します。自分の環境だけで除外したいfile(editor設定や個人用scriptなど)は、.gitignoreではなく.git/info/excludeへ同じpatternで書きます。このfileはcommitされないため、他のmemberへ影響しません。利用者単位の共通除外はgit config --global core.excludesFile ~/.gitignore_globalで指定したfileに書きます。
# dependencies
node_modules/
# build output
dist/
coverage/
# local OS/editor files
.DS_Store
*.swp
# local environment overrides
.env.local
秘密情報はignoreしただけで安全になるわけではありません。一度commitしたcredentialは履歴に残るため、漏えいした値を失効・再発行し、必要なら履歴対応を管理者と行います。sample設定には実値を入れず、必要なkey名だけを書きます。
.gitignore patternはどう読むか
| pattern | 意味 | 例 |
|---|---|---|
dist/ |
dist directoryを除外 | build output |
*.log |
任意名の.log fileを除外 | debug log |
/temp |
.gitignore位置を基準にroot直下を除外 | root限定の一時物 |
!example.env |
先のpatternから例外として再包含 | sample fileを共有 |
patternは置いた.gitignoreのdirectory位置にも影響されます。期待どおり除外されない場合は、感覚でslashを増やさずgit check-ignore -v path/to/fileで一致したpatternとfileを確認します。
すでに追跡済みのfileはどうするか
.gitignoreへ追加しても、すでにGitが追跡しているfileは自動で追跡解除されません。内容を共有し続けるべきか、local専用へ変更するかをteamで確認します。
git ls-files path/to/file
git check-ignore -v path/to/file
# fileはlocalに残し、今後の追跡対象から外す場合
git rm --cached path/to/file
git rm --cached後の削除はrepository側の変更としてcommitされます。共有fileを誤って外さないよう、変更意図と他環境への影響を確認してください。
最初のcommitを作る安全な手順
git add .をすぐ実行せず、未追跡fileとignore結果を見てから必要なfileをstageします。
git status --short
git check-ignore -v .env.local
git add .gitignore README.md package.json src/
git diff --staged
git commit -m "Initialize project"
git status
binary、database dump、大きな生成物が入っていないかも確認します。最初のcommitが小さく目的明確なら、後からprojectの出発点を読みやすくなります。
remoteを追加するときの確認項目
localで新規作成し、後から空のremote repositoryへ接続する場合は、URLとremote名を確認して追加します。
git remote add origin https://github.com/example/project.git
git remote -v
git branch --show-current
git push -u origin main
remote側にREADMEなどのcommitがすでにある場合、localと別の履歴が存在します。force pushで上書きせず、fetchして履歴と内容を確認し、統合方針を決めてください。
初期化後のチェックリスト
- repository rootが意図したdirectoryか。
- user.nameとuser.emailが目的のidentityか。
- 秘密情報、dependency、build outputがstageされていないか。
- .gitignore patternが
check-ignore -vで一致するか。 - 最初のcommit差分を読んだか。
- remote URLと送信先branchが正しいか。
初期設定の目的はcommandを一度通すことではなく、共有する正本とlocalだけのfileを分けることです。除外基準が曖昧なら、先にREADMEへ生成手順と必要な設定を記録してからcommitしてください。