🦁
ローカルデスクトップでgit管理をする
現場作業でGitHubが使えないので、デスクトップでGit管理することにしました。
フォルダ構成
デスクトップ上に下記のフォルダを作ります
YYYYMM_XXXXX(案件名フォルダ)
├── .git(リモート側)
└── YYYY-MM-DD_hh-mm(ソースコード)
リモート側のgitを設定
リモート側のフォルダで以下のコードを実行
git init --bare --shared
上記コマンドは 「作業ツリーなし」のリポジトリを作るためのオプションです。
ローカル側のgitを設定
ローカル側のフォルダで以下のコードを実行
git init
git remote add origin "リモートフォルダのパス"
リモートフォルダのパスは「パスをコピー」で取得したものをそのまま貼り付けでOKです
pushする
下記のコマンドでpushを実行する
git add .
git commit -m "xxxxxx"
git push origin master
git add.
する前にgit status
で状態確認しといたほうがいいかも。。。
上記で完了です。
--bare を付ける理由
通常のリポジトリ(non-bare)には、次の2つが存在します:
- .git/ ディレクトリ(履歴やブランチの情報)
- 作業ツリー(実際のファイル群)
この状態で、今そのリポジトリで master が checkout されているときに、外部から master に push されると…
作業ツリーと HEAD がズレる
- push により master ブランチの履歴が強制的に上書きされる
- でもリモートでは master が現在 checkout 済みなので、その履歴と作業ツリーが一致しなくなる
- 結果、矛盾した状態(ツリー ≠ HEAD)になる
Git はこれを検出して、次のようなエラーを出します:
refusing to update checked out branch: refs/heads/master
--bare を付けたら以下のようになる
- --bare を付けたリポジトリには、作業ツリー(ファイル群)自体が存在しない。
- したがって、ブランチを checkout することもない。
- つまり、push されても矛盾が起きない。
そのため、bare リポジトリは 安心して中央リポジトリとして使える というわけです。
Discussion