| この記事の要点 |
|
git init の基本
既存のディレクトリを Git 管理下に置くには git init を実行します。.git/ という隠しディレクトリが作られ、ここに履歴やオブジェクトが格納されます。
# 既存ディレクトリを初期化
cd ~/projects/myapp
git init
# 出力 (Git 2.28+)
# Initialized empty Git repository in /home/user/projects/myapp/.git/
# 新規ディレクトリごと作成
git init myapp
cd myapp
# 現在の状態確認
git status
# On branch main
# No commits yet
デフォルトブランチ名を main に
Git 2.28 以前は master、それ以降は OS によって異なります。チームで揃えるためにグローバル設定:
# グローバルで main に統一(最初に一度だけ)
git config --global init.defaultBranch main
# 確認
git config --global init.defaultBranch
# main
# 既に master で init してしまったら改名
git branch -m master main
.gitignore の作成
追跡したくないファイル(依存ライブラリ、ビルド成果物、秘密情報)を .gitignore に列挙します。プロジェクトのルートに置きます。
# /.gitignore
# OS
.DS_Store
Thumbs.db
# Editor
.idea/
.vscode/
*.swp
# Node.js
node_modules/
npm-debug.log*
.env.local
# PHP / Laravel
vendor/
storage/*.key
storage/logs/*
storage/framework/cache/*
.env
# Python
__pycache__/
*.pyc
.venv/
# Build artifacts
dist/
build/
*.o
*.class
# Logs
*.log
テンプレートは github/gitignore リポジトリから言語別に取得できます。
初回コミット
# 状態確認
git status
# Untracked files: .gitignore, README.md, src/...
# ユーザ情報(未設定なら最初に)
git config user.name "Taro Yamada"
git config user.email "taro@example.com"
# 全ファイルをステージング
git add .
# ステージング内容を確認
git status
# コミット
git commit -m "Initial commit"
# 履歴
git log --oneline
# a1b2c3d (HEAD -> main) Initial commit
リモートリポジトリへの紐付け
# GitHub で空リポジトリを作成しておく
# https://github.com/new
# SSH で紐付け(推奨)
git remote add origin git@github.com:user/myapp.git
# HTTPS で紐付け(CI 等)
git remote add origin https://github.com/user/myapp.git
# 確認
git remote -v
# origin git@github.com:user/myapp.git (fetch)
# origin git@github.com:user/myapp.git (push)
# 初回 push(-u で upstream 設定)
git push -u origin main
# 以降は単に
git push
git pull
ベアリポジトリ (--bare)
自前のサーバを共有リモートとして立てる場合は ベアリポジトリ(作業ツリー無し)で初期化します。慣習として .git サフィックスを付けます。
# サーバ側 (例: 192.168.1.10)
ssh git@192.168.1.10
mkdir -p /srv/git/myapp.git
cd /srv/git/myapp.git
git init --bare
# 出力: Initialized empty Git repository in /srv/git/myapp.git/
# .git/ ではなく、カレント直下に HEAD / objects/ refs/ などが作られる
# クライアント側
git remote add origin git@192.168.1.10:/srv/git/myapp.git
git push -u origin main
.git ディレクトリの中身
| パス | 役割 |
|---|---|
HEAD | 現在のブランチ参照(ref: refs/heads/main) |
config | このリポジトリ専用の設定 |
objects/ | 全コミット/ツリー/blob のオブジェクトストア |
refs/heads/ | ローカルブランチ参照 |
refs/remotes/ | リモートブランチのキャッシュ |
refs/tags/ | タグ |
hooks/ | pre-commit / pre-push 等のフック(サンプル付) |
info/exclude | 個人用 .gitignore(共有しない) |
index | ステージング領域(バイナリ) |
logs/ | reflog(HEAD の動き) |
テンプレートを使った init
# テンプレートディレクトリを作っておく
mkdir -p ~/git-template/hooks
cat > ~/git-template/hooks/pre-commit <<'EOF'
#!/bin/sh
# コミット前に lint 実行
npm run lint || exit 1
EOF
chmod +x ~/git-template/hooks/pre-commit
# テンプレートを使って init
git init --template=~/git-template
# グローバル設定にしてもよい
git config --global init.templateDir ~/git-template
サブモジュール / Worktree
# 別リポジトリを子として組み込む
git submodule add https://github.com/user/lib.git libs/lib
git submodule init
git submodule update --recursive
# 1 つのリポジトリで複数ワーキングツリーを持つ
git worktree add ../myapp-hotfix hotfix/1.2.3
# ../myapp-hotfix で hotfix/1.2.3 ブランチを別ディレクトリで作業可能
git worktree list
git worktree remove ../myapp-hotfix
typical な初期化スクリプト
#!/bin/bash
# new-project.sh
set -euo pipefail
NAME=$1
mkdir "$NAME" && cd "$NAME"
git init -b main
cat > .gitignore <<EOF
node_modules/
.env
dist/
*.log
EOF
cat > README.md <<EOF
# $NAME
TODO: write description
EOF
git add .
git commit -m "Initial commit"
echo "Repository created: $(pwd)"
echo "Next: git remote add origin <URL> && git push -u origin main"
FAQ
Q: git init 後にやり直したい
A: rm -rf .git で履歴ごと削除して再 init。作業ファイルは消えません。
Q: 既存ディレクトリの一部だけ管理したい
A: ルートで init し、.gitignore で対象外を除外する方が素直。サブディレクトリ単独 init も可能だが複雑になる。
Q: bare と通常の違いは?
A: bare は作業ツリーが無く、push 受け取り専用。複数開発者で共有する中央リポジトリとして使う。GitHub 内部もベアリポジトリ。
子ページ
子ページはありません
同階層のページ
- 用語一覧
- エラー一覧
- git本体のインストール(Linux)
- Linuxサーバーへのgit導入とクライアントのセットアップ
- リモートリポジトリをローカルリポジトリとしてクローンする方法
- リモートとローカルのリポジトリを同期(pull)する方法
- 設定の確認
- gitユーザー名とemailの設定
- リモートリポジトリの作成
- ローカルリポジトリの作成
- 新規ファイル/ディレクトリをインデックスに登録
- インデックスの登録状態を確認
- ローカルリポジトリの変更をコミット
- コミット履歴の確認
- クライアントからリモートリポジトリの接続設定、確認、削除
- リポジトリへのプッシュ
- リモートリポジトリからクライアントへのSSHクローン
- リモートとローカルの差分表示
- バージョンの確認
- プロキシの設定
- ローカルをリモートリポジトリの状態に戻す
- ブランチの作成, 一覧表示, 切り替え
- ブランチのマージと削除
- リベース
- .gitignoreの書き方
- .gitignoreの設定が反映されない場合
- 特定のファイルをgitの管理から外す方法
- 参照(ORIG_HEAD, HEAD, FETCH_HEAD)
- git rm [-r --cached] の取り消し
- 一部のディレクトリ/ファイルのみをリポジトリから復元する方法
- ローカルとリモートリポジトリの有無を同期
- pushの取消し方法
- マージツールの起動方法
- Gitで「MERGING」の状態
人気ページ
- 1 Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法
- 2 tomcat の起動 / 停止ログと catalina.log・catalina.out の違い
- 3 JavaScript で base URL を取得する方法|window.location.origin
- 4 YouTube Data API v3 エラー一覧|403・400・404 の原因と対処
- 5 Laravel エラー一覧|500/Blade/DB 接続/ルーティングの代表エラー
- 6 3Dグラフィックスとは|モデリング/レンダリング/主要ソフトウェア (Blender / Maya)
- 7 Spring Frameworkのアノテーション一覧
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- プロジェクトをTomcatプロジェクトとして認識させる方法 2026-10-07 22:32:50
- MySQLの1366 Incorrect string value|Laravelの文字コード・絵文字エラー 2026-10-07 21:54:03
- curlの証明書ホスト名不一致|旧エラー51・現行60の確認と対処 2026-10-07 21:54:03
- LaravelのMassAssignmentException|fillableの原因と安全な対処 2026-10-07 21:54:03
- Eclipse で Tomcat の起動ログがコンソールに出ない時の確認手順 2026-10-07 21:54:02
- MySQLにおける中央値(Median)の導き方(バージョン8未満) 2026-10-07 13:49:45
- getInputForward 2026-10-07 13:41:15
- JSONから配列に変換 2026-10-07 13:41:15
- ビューから値をモデルに格納しコントローラーで受け取る方法 2026-10-07 13:23:41
- Laravelのテーブル作成と定義変更|マイグレーション・up/down・注意点 2026-10-07 13:23:41
- NumPy 配列に要素を追加する方法 (append / concatenate) 2026-10-07 13:23:41
- MariaDB・MySQLで現在日時を取得する方法|NOW・タイムゾーン・保存型 2026-10-07 13:13:36
- 【django】テンプレートで定数を使用する方法 2026-10-07 13:10:15
- Spring BootにおけるApplication.propertiesの環境依存設定の分割方法 2026-10-07 12:09:35
- Not supported for DML operations【Springエラー】 2026-10-07 11:09:38