-SVNに代わる構成管理。ローカルリポジトリが作成できその中でブランチを切ったりコミットできたりする点がSVNとの違い。リモートリポジトリとローカルリポジトリがあり、混乱する。はっきり言って現状ではSVNのほうがシンプルで操作が楽な印象。
-SVNに代わる構成管理。ローカルリポジトリが作成できその中でブランチを切ったりコミットできたりする点がSVNとの違い。リモートリポジトリとローカルリポジトリがあり、混乱する。はっきり言って現状ではSVNのほうがシンプルで操作が楽な印象。バイナリの扱いがダメダメなので個人開発の場合はSVNのほうが良いだろう。

*参考サイト [#ic89dc18]

https://try.github.io/levels/1/challenges/1

*新しいブランチを作ってコミットするまで [#wf8fe668]

 git checkout -b feature/mynewbranch
 git push origin feature/mynewbranch -n
 git push origin feature/mynewbranch

*チェックアウト手順 [#ufb0915a]

**クローンする [#j7096e54]

 git clone http://example.com/git 任意のディレクトリ名
 cd 任意のディレクトリ名

**pullする [#mb9757b4]

 git pull origin testing

*コマンド版 gitローカルリポジトリ作成 [#ea6e8add]

-ローカルリポジトリを作る場合。

 git init

-既存のリポジトリをクローンする場合はinit 不要

 git clone http://example.com/hoge/git.git [hoge以外の名前を付けたい場合]

 git clone http://ID:PW@example.com/git


イメージ的には以下構成となる。

 DIR/hoge/.git →http://example.com/hoge/git.git
 DIR/fuga/.git →http://example.com/fuga/git.git

-リモートのブランチ一覧

 cd xxx
 git branch -r

 git branch 対象ブランチ
 git checkout 対象ブランチ
 #一度にやる場合は下記
 git checkout -b 対象ブランチ

-今のローカルがどのリモートに紐づいているか

 git remote -v

-そもそもorigin/masterとは?

 origin: レポジトリの場所(URL)の別名
 master: ブランチの名前

デフォルトの対象はorigin/masterだ。

 git config --list

上記コマンドで今どこを示しているかを確認せよ。

-この状態だとブランチの内容を取り込んでいない!以下のコマンドで取り込む

 git pull origin ブランチ名称

 

-リモートを複数登録できる。

 git remote add NEW_REMOTE git@bitbucket.org:xxxx/foo.git

**コマンド版を使う場合の設定 [#gdfd244b]

~/.gitconfigに設定を保存しておける。




*SVNとの違い [#n055d4dc]

ローカルリポジトリ、index、リモートリポジトリと構成要素が複雑怪奇。ブランチがSVNより増える傾向がある。

|add|コミット準備領域であるindexに追加する|
|commit|あくまでローカルリポジトリに対してのコミット。-aオプションをつけないと変更してもコミット対象にはならない|
|PUSH|リモートリポジトリへのコミット。SVNでいうところのコミットと同義。リモートリポジトリがすっからかんの場合は git push -u origin master|
|FETCH|SVNでいうところのアップデート(ローカルへのマージは行わない?)|
|PULL|SVNでいうところのアップデート(ローカルへのマージまで行うFETCH+MERGE)|
|clone|チェックアウトだが、gitではブランチの切替に利用する|
|fork|githubの機能。cloneと似ているが、分散開発用に元の所有者に通知がいく。forkするという行為はオリジナルへの貢献を前提とする。|
|アップストリーム ブランチ|ローカルに対して上流にあるブランチ。cloneした場合はclone元だが、指定もできる|
|branch -a|リモート含むブランチ一覧の表示|
|branch -d|ブランチの削除。すっからかんじゃないと削除不可能|
|git log --pretty=oneline pom.xml|ログを省略形の一行で表示。|
|git log --abbrev-commit pom.xml|コミットIDを省略系。一行で表示。|

**checkout [#he929032]

ローカルブランチを作成して、そこにリモートを紐つけ

|git checkout -b local_branch origin/remote_branch|

このあとgit fetchが必要。git pullと何が違うの?


**push [#q16baf87]

引数なしのpushは非常に危険
http://dqn.sakusakutto.jp/2012/10/git_push.html

|ブランチ指定してPUSH|git push --set-upstream origin testing|
|実際には実行しない(dry-run)|git push -n |

**pull [#p7b70014]

リモートから取得する(fetch+merge)

|git pull origin testing|originリポジトリのtestingブランチを取り込む|


**元に戻す系 [#c71d875d]

svnのように簡単ではない。svn revertはgit checkout file名

|checkout ファイル名|svn revert ファイル名|
|checkout .|すべてのファイルのローカル変更を取消!|
|revert|コミットを取り消す|
|reset|ある時点のコミット以降をすべて取り消す!|

**マージ [#p19140e0]

-マージしたいブランチに移動

 git checkout merged

-マージ

 git merge マージ元のブランチ


**チェックアウトなど [#nf5acd65]

**ファイルの変更サイクル [#u3f54039]

+変更
+add(ステージングにファイルが追加)
+commit(ここまではローカルリポジトリ)
+push(リモートリポジトリにコミット)


*ブランチ運用 [#d3c4cf5a]

masterブランチを統合ブランチとして、リリース向けに運用する。トピックブランチは機能追加、バグ修正のタイミングで作成され、リリース前に統合ブランチにマージされる。
branch -aでリモート含むブランチ状況を確認しながら作業する。

|git branch testing|testingブランチ追加|
|git checkout testing|testingブランチに切替|

*マージ [#t98d0533]

**first-forwardマージ [#u38007d6]

分岐以降統合ブランチに変更がない場合、統合ブランチのコミット履歴はトピックブランチのコミット履歴とイコールになる。シンプルなので早送りマージと呼ばれる。ただしトピックブランチの履歴は残らないので、たとえfirst-forwardが可能であってもやらないほうがよい。

**マージ [#b3f859c6]

通常のマージ。統合とトピックブランチをマージしたというコミットが作成される。

**rebase [#v0c83a97]

ブランチの履歴を消してマージ。トピックブランチが小さいものが多く、頻発するのであればこちらの運用が良いかもしれぬ。

*いろいろためした [#d38dc474]

-最新のときにgit status

 $ git status
 On branch MyBranche
 Your branch is up-to-date with 'origin/NewBranch'.
 nothing to commit, working directory clean

-古いときにgit status。リモートリポジトリに6コミット分あるよ。

 $ git status
 On branch development
 Your branch is behind 'origin/Develop' by 6 commits, and can be  fast-forwarded.
  (use "git pull" to update your local branch)
 nothing to commit, working directory clean

*トラブルシューティング [#t3c60e84]

 error: failed to push some refs to 'http://example.com/git'
 To prevent you from losing history, non-fast-forward updates were rejected
 Merge the remote changes before pushing again.  See the 'Note about
 fast-forwards' section of 'git push --help' for details.

*Install [#f702a558]

It's easy to install from source! just configure and make and make install!

*apache [#d069f138]

git-http-backendがソースコンパイルだとないため、下記はバイナリーインストールのときのみ可能。

http://www.proton.jp/main/programming/git/smart-http.html

 SetEnv GIT_PROJECT_ROOT /usr/local/git
 SetEnv GIT_HTTP_EXPORT_ALL
  
 ScriptAlias /git/ /usr/local/libexec/git-core/git-http-backend/
  
 <locationMatch "/git">
    AuthType Basic
    AuthName "Git Area"
    AuthUserFile /usr/local/apache2/htdocs/.htpasswd
    require valid-user
    Order allow,deny
    Allow from all
 </locationMatch>


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