#author("2021-05-21T04:38:31+00:00","default:src128","src128")
&tag(開発環境,git);
*目次 [#mfa3ae2d]
#contents

*関連ページ [#ab5f0206]
-[[Pro Git]]
-[[git-secrets]]
-[[./Windows]]
-[[./概念]]
-[[./Tips]]
-[[./設定]]
-[[./運用]]
-[[./ワークフロー]]
-[[./gitignore]]
-[[./upstreamの管理]]
-[[./トラブルシューティング]]
-[[msysgit]]
-[[git-svn]]

*初期設定 [#pbe1610d]
**名前、メールアドレスの設定 [#a89c9a46]
 $ git config --global user.name = "src"
 $ git config --global user.email = "src@xxx.yyy"
次のコマンドでちゃんと設定できたか確認できる
 git var GIT_COMMITTER_IDENT
 git var GIT_AUTHOR_IDENT
UNIX系OSの場合、~/.gitconfigファイルに設定が保存される。

*リポジトリの初期化 [#m6213818]
フォルダに移動しgit initを実行するだけ。
 mkdir myproduct
 cd myproduct
 git init

*ファイルを追加 [#lf924da4]
**現在のフォルダ以下のファイルをすべて追加 [#aeb24cd4]
 git add .
**指定ファイルを追加 [#lfc39bca]
 git add sample.txt
**バージョン管理しているファイルをすべて追加 [#c0e50c6b]
 git add -u
**バージョン管理しているファイル&新規ファイル [#w6d3a1ed]
 git add -A
**.gitignore [#f5017f59]
バージョン管理から除外したいファイルはリポジトリのルートディレクトリに.gitignoreファイルを作成する
 *~
*コミット [#p2bef697]
**ログを直接指定 [#l3e007c9]
"-m"オプションでログを直接記録できる
 git commit -m "sample.txt added"
**エディタでログを指定 [#a93c4c18]
"-m"オプションを使わない場合エディタが立ち上がる。
-1行目: 変更内容の要約
-2行目: 空行
-3行目以降: 変更した理由の説明。
**一括コミットしたい場合 [#qacd5209]
 git commit -a

**変更点を確認しつつコミットログを書く [#z0e37053]
 git commit -v

**特定ファイルだけcommit [#te23105b]
 git commit sample.txt

**特定ファイルの変更記録要求を取り消す [#c1f99bd0]
 git reset sample.txt
*変更点の確認 [#c7eb3f28]
**変更記録をリクエストしてない変更点の表示 [#sce4c205]
 git diff
git diffコマンドはgitに変更点を記録したいとリクエストしてない変更点を出力するので変更されたファイルをgit addすると表示されなくなる。
** commitしていない変更点を表示 [#z6f4e958]
 git diff HEAD
** 部分変更をインデックスに記録した場合の変更点の表示 [#nb7d3c35]
 git diff --cached
*状態の記録をリクエスト [#gbf0a90b]
git addコマンドを使って状態の記録をリクエスト(=インデックスに記録)することができる。

** 個別にファイルを指定 [#r2db820b]
 git add sample.txt
** バージョン管理しているすべてのファイル [#i92921ca]
 git add -u
**部分変更 [#s834dcd3]
変更点が2箇所以上ある場合、変更箇所を確認しながらaddする箇所を選定できる。
 git add -p
*状態の確認 [#x0c4ca35]
 git status

*履歴の表示 [#y1aa28b1]
**ログを表示する [#jed601a1]
 git log --pretty=short

**パスで検索する [#f35d1cf7]
 git log --pretty=short sample.txt

**ログメッセージをgrep検索する [#e1800f9d]
 git log --pretty=short grep='xxx'

*変更を取り消す [#s76f8da5]
** 過去のコミットを取り消す [#sf9cc8a5]
 git revert xxxxx
**ワークツリーの変更を取り消す [#o9f355b5]
インデックスに記録されている状態に戻す
 git checkout sample.txt
最新のコミットの状態に戻す
 git checkout HEAD sample.txt

**コミットをなかったことにする [#s2218b0d]
git reset HEAD^を使う。部分コミットしたい場合に間違えたときなどに使う。
 git commit -a # 間違えたコミット
 git reset HEAD^ #現在のヘッドの一つ前に戻る。
ワークツリーの内容も戻す場合
 git reset --hard HEAD^

**コミットをやり直す [#ecabf10c]
ログメッセージを記録し直したい場合に使う。git reset HEAD^→ git commitのような感じ。
 git commit --amend

**二つ以上前のコミットを書き換える [#gb093cb9]
HEADから3つ前のコミットを書き換える場合。
 git rebase -i HEAD-3
実行するとエディタで指示票の編集画面が表示されるので、pick→editに書き換え保存する。
 pick xxxxxx あれをこうした
 pick yyyyyyy それをあれした
 pick zzzzzz  それからこうなった。
最初の行のコミットを書き換える場合
 edit xxxxxx あれをこうした
 pick yyyyyyy それをあれした
 pick zzzzzz  それからこうなった。
コミットを修正。
 git commit --amend
続く混みとを反映する
 git rebase --continue


*バックアップリポジトリを作成する [#q3019b1b]
**空リポジトリの作成 [#g2ec6cc1]
/home/repository/sample.gitディレクトリに空のリポジトリを作成する。
 $ mkdir -p /home/repository/sample.git
 $ cd /home/repository/sample.git
 $ git --bare init
**オリジナルワークツリーの内容をpush [#dace9143]
 $ cd <ワークツリー>
 $ git push /home/repository/sample.git master
**バックアップリポジトリからcloneして使う [#bd255ac7]
 $ git clone /home/repository/sample.git sample.new
**cloneしたワークツリーの内容をpush [#o01979f4]
ざっくり書くと 「git push <反映先> <反映もと>」となる。
 $ git push (git push origin masterと同じ)

*共同開発 [#s2406e8e]
**マージ [#zb9cb859]
 git pullとgit pushを駆使する。この辺はCSV、Subversionと同じような感じか。
**共用リポジトリ [#bfd14fee]
-プロジェクトのグループメンバーは1つのUNIXグループに属するようにする。
-git init --sharedオプションでリポジトリを作る。
-umask 002とか007を使って、グループのメンバーが書き込めるようにする
#pre{{
umask 002
mkdir -p /home/repository/bigproject.git
cd /home/repository/bigproject.git
git --bare init --shared
}}

*ブランチ [#b0777dee]
**ブランチを作る [#p33e4f72]
"bugfix-a"というブランチを作り、ワークツリーをそのブランチに切り替える
 git checkout -b bugfix-a
以下のコマンドと同じ
 git branch bugfix-a
 git checkout bugfix-a
**現在のブランチを表示する [#p70ff915]
 git branch
**ブランチを切り替える [#u81a1624]
 git checkout master
 git checkout bugfix-a
**ブランチの内容を併合する [#n6058f6f]
バグフィックス用のブランチbugfix-aで行った変更をメインブランチに併合するには
 git checkout master
 git merge bugfix-a
**ブランチを後から作る [#x097235b]
現在のワークツリーの内容をブランチとして、3つ戻ったところをマスターとする。
 git branth bugfix-b
 git reset --hard master-3
**ブランチ移動の際の変更 [#l8d3969d]
ブランチ移動の際にワークツリーでコミットされていないファイルがある場合混乱することがある。
現在bugfix-cブランチにいてmaster→bugfix-cに戻るとき次のようにする。
 git stash
 git checkout master
 <masterブランチでいろいろ修正>
 git checkout bugfix-c
 git stash pop

*ポイント [#b5f652c5]
**編集→コミットまでの流れ [#cc21f3a6]
-ファイル編集
- 新規ファイルがある場合はgit add . 
- git commit -a

**サブモジュールを使う [#mae9fb07]
-[[git submodule - みずぴー日記:http://d.hatena.ne.jp/mzp/20080508/git]]
-[[[git 1.6.0.2] submoduleを使おう!その1:add, status - satoko's blog - s21g:http://blog.s21g.com/articles/1401]]
-[[[git 1.6.0.2] submoduleを使おう!その2 - satoko's blog - s21g:http://blog.s21g.com/articles/1411]]
*リモートリポジトリ定義 [#nb32e2e8]
リモートリポジトリに対するエイリアス定義のようなもの?
 git remote add sample git://repo.aaa.com/git/sample.git
とすれば以後 git fetch sampleとすれば最新の状態をコピーすることができる。
*トラブルシューティング [#m28d3a69]
**zsh: command not found: git-upload-pack [#z668deb1]
[[Mac を git の共有レポジトリにする -- BONNOH FRACTION 13:http://www.fraction.jp/log/archives/2008/05/20/Share_git_repository_on_Mac_OS_X]]によるとリモートマシンで次のコマンドを実行する。sshしたときに.zshrcが読まれずパスが通らないのが原因か。
 ln -s ~/.zshrc ~/.zshenv


トップ   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS