Gitの使い方
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
単語検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
#contents
* gitサーバ [#m4e231d9]
http://gitlab.arch.info.mie-u.ac.jp
*はじめに [#jcb5dcef]
gitlabの使用には専用のアカウントが必要となるので,
http://gitlab.arch.info.mie-u.ac.jp
から研究室用のメールアドレスを用いてアカウント登録を行う。~
取得したアカウントを用いてログインする。
次にprofile setting-> SSH keysで公開鍵の登録を行う。
画面の指示に従って、公開鍵の中身を登録する。~
公開鍵を作成していない人は、[[秘密鍵、公開鍵作成方法]]に...
*リポジトリの取得(ローカルリポジトリの作成) clone [#daaf5...
$ git clone git@gitlab.arch.info.mie-u.ac.jp:<リポジトリ...
で指定ディレクトリにリポジトリのデータを取ってくる事がで...
サブモジュールを含むレポジトリの場合は、
$ git clone --recursive git@gitlab.arch.info.mie-u.ac.jp...
とするか、clone後に
$ git submodule update --init
を実行する。ただし、サブモジュールのbranchは(no branch)に...
$ git checkout master
を実行する必要がある。
*編集したものをローカルリポジトリに反映 commit [#g4224ca0]
$ git commit -a
を実行するとエディタが起動されるので、コメントを記述する...
以下にあるgit addで一度でも追加されたファイルのみが反映さ...
*アイテムの追加 add [#fa9d73a0]
$ git add <ファイル名>
で指定ファイルがGitの追跡対象に追加される。
$ git add <ディレクトリ名>
でディレクトリ内を再帰的にaddすることが出来る。~
ローカルリポジトリへはgit commitしなければ反映されない。
*アイテムの削除 rm [#o03cab8c]
$ git rm --cached <ファイル名>
で指定ファイルがGitの追跡対象から外される。
オプションの--cachedを外すと作業ディレクトリ内の実ファイ...
$ git rm --cached -r <ディレクトリ名>
でディレクトリ内のファイルを再帰的にrmすることが出来る。~
これも、ローカルリポジトリへはgit commitしなければ反映さ...
*アイテムの移動 mv [#i9619692]
$ git mv <ファイル1> <ファイル2>
でファイル1からファイル2にリネーム(移動)できる。~
これも、ローカルリポジトリへはgit commitしなければ反映さ...
*リモートリポジトリへの反映 push [#ldeaa1cb]
$ git push
でローカルの状態をリモートに反映する事が出来る。
但し、自分がリモートの変更をpullしてから、pushするまでの...
なお、空のリモートレポジトリにpushする場合、masterブラン...
git push -u origin master
のようにリポジトリとブランチを明示的に指定する必要がある...
*ローカルリポジトリの更新 pull [#jdd5de44]
$ git pull
でリモートリポジトリの状態を取得し、リモートとローカルの...
このコマンドはリモートの状態の取得のみを行う、
$ git fetch
と、マージを行う
$ git merge
を両方行うものである。
pullやmergeではそれぞれの変更内容が干渉すると、conflict(...
*pushでのrejectの解決 [#g142d451]
自分がpushするまでに、他からのpushがあるなどしてrejectが...
$ git push
To git@git.arch.info.mie-u.ac.jp:testing
! [rejected] master -> master (non-fast-forward)
error: failed to push some refs to 'git@git.arch.info.mi...
To prevent you from losing history, non-fast-forward upd...
Merge the remote changes (e.g. 'git pull') before pushin...
'Note about fast-forwards' section of 'git push --help' ...
のように表示される。
この場合
$ git pull
でリモートとマージを行い、
$ git push
とすることで解決できる。
*pull/mergeでのconflictの解決 [#od55d9c3]
pullやmergeではマージ対象のそれぞれのファイルに干渉し合う...
$ git pull
Auto-merging m_test.c
CONFLICT (content): Merge conflict in m_test.c
Automatic merge failed; fix conflicts and then commit th...
のように表示される。
上の例ではconflictを起こしているファイルはm_test.cであり...
<<<<<<< HEAD
int main(){
=======
main(void){
>>>>>>> 1anb832159
のように差分が挿入される。
この部分を適当に編集して、
int main(void){
例えば、このようにしてconflictを解消したら
$ git commit -a
でコミットすることで解決できる。
*ローカルリポジトリを以前のコミットに戻す [#bad47009]
$ git reset --hard <コミットID>
でローカルリポジトリと作業ディレクトリを指定したコミット...
但し、reset前のコミットに戻る事が難しくなるので、必要なら...
コミットIDにはgit log等で確認できるSHAの他、現在の位置を...
*特定ファイルのみを以前のコミットに戻す [#e7cb61a0]
$ git checkout <コミットID> <ファイル名>
で作業ディレクトリのファイルを以前のコミットに戻せる。
ローカルリポジトリへはgit commitしなければ反映されない。
*以前のコミットを確認する [#m45a6fa4]
$ git checkout <コミットID>
で作業ディレクトリを指定したコミットの状態に戻せる。
確認後は
$ git checkout <ブランチ名>
で元のブランチに戻る。
*作業ディレクトリとローカルリポジトリとの差分を表示 [#of7...
$ git diff HEAD
で作業ディレクトリとローカルリポジトリの差分を表示する。
*以前のコミットのファイルを表示 [#q224f683]
$ git show <コミットID>:<ファイル名>
で指定したコミットでのファイルの内容が表示される。
*作業ディレクトリの現在の状態の表示 [#n055e630]
$ git status
で変更されたファイルやリモートからどれだけコミットされて...
*ファイルやディレクトリの更新履歴を見る [#l68e5446]
$ git log
でコミットの履歴が確認できる。
コミットID、Auithor、Date、コミットメッセージが表示される。
$ git log -p
とすると各コミットでのdiffも表示される。
$ git log --graph -all
とすると、コミットグラフが表示される。
*管理下に無いアイテムの削除 clean [#kf01c2da]
$ git clean -f -x
でGITの管理下にないファイルが削除される。
オプションの-fは、強制的に削除、-xは.gitignore指定された...
$ git clean -n -x
で削除されるファイルの一覧を表示できる(実際に削除はされ...
*タグ関連 [#h4772e79]
**タグ一覧 [#n48815f2]
$ git tag
一部のバージョンのみ一覧表示したい(フィルタリングしたい...
$ git tag -l 'v1.*'
とすると、"v1."で始まるタグのみ表示される。
**タグを付ける [#c876c140]
$ git tag -a v1.0 -m 'First release'
ただし、git pushしてもリモートレポジトリには反映されない。
リモートレポジトリにもタグを付ける場合は、下記のようにす...
$ git push origin v1.0
ローカルレポジトリのタグを全てリモートレポジトリに反映さ...
$ git push origin --tags
とする。ただし、複数のメンバで共有しているレポジトリの場...
**ローカルのタグを削除 [#y0865b23]
$ git tag -d TAGNAME
**リモートのタグを削除 [#a481c0e2]
(ローカルのタグを削除した上で)
$ git push origin :TAGNAME
*ブランチ関連処理 [#maf49bad]
**ローカルブランチの作成 [#zb1856dc]
$ git branch <ブランチ名>
でブランチを作成できる。
**ブランチの移動 [#tdb1f0f0]
$ git checkout <ブランチ名>
で異なるブランチに移動できる。
**リモートリポジトリとブランチを共有 [#xc4fd56b]
$ git push origin <ブランチ名>
でリモートにブランチを作る事が出来る。
一度作れば、次回からはgit pushで反映する対象に入る。
**リモートのブランチを取得 [#t2109f46]
$ git branch <ブランチ名> origin/<ブランチ名>
でローカルにブランチを取ってくる事が出来る。
一度取得すれば、次回からはgit pullで取得する対象に入る。
取得後は
$ git checkout <ブランチ名>
で移動できる。
**リモートのブランチを削除 [#w2594941]
$ git push --delete origin <ブランチ名>
**ブランチの一覧表示 [#jeac06c5]
$ git branch
でローカルブランチの一覧を表示できる。
$ git branch -r
でリモートのブランチの一覧を表示することも出来る。
*各ブランチのマージ [#sa7efe58]
$ git merge <ブランチ名>
で現在のブランチと指定したブランチをマージできる。~
マージ後は自動的にコミットされる。
*レポジトリの切り出し [#gb951717]
[設定]
$ MasterProject=CAR (切出すファイルの入ったレポジトリ)
$ SubProject=Engine (切出し対象のディレクトリ名=レポジ...
[切出し]
ローカルレポジトリを破壊するので、作業用ディレクトリ($Su...
cloneしている。マスターのプロジェクトディレクトリ内で作...
要注意(下記手順に従えばOK)。
$ git clone git:$MasterProject $SubProject
$ cd $SubProject
$ git filter-branch --subdirectory-filter $SubProject HEAD
$ git remote set-url origin git:$SubProject
$ git push -u origin --all
[切出したレポジトリをサブモジュールとして登録]
下記作業は元となったマスター側のディレクトリ内で行う。
$ cd ../$MasterProject
$ git rm -r $SubProject
$ git submodule add git:$SubModule $SubModule
$ git commit
$ git push
*filter-branch [#cc2d49c5]
**ファイル、ディレクトリ移動時にログを残す [#u550eb6b]
$ git filter-branch -f --tree-filter "perl ~muto/user-sc...
**リポジトリ内からファイル、ディレクトリを削除する [#s39c...
$ git filter-branch -f --tree-filter "perl ~muto/user-sc...
*ファイルを変更してからブランチを切る [#a16b14c6]
何らかの作業をしてから、実は新しいブランチで作業すべきだ...
そのままだとブランチを切る事が出来ません。
その場合、
$ git stash save
で一旦変更した内容をstashに待避します。直前のcommit以降の...
その後
$ git branch new_branch
$ git checkout new_branch
等でブランチを移動し、
$ git stash apply
で待避した変更を書き戻して元に戻します。
ただし、Git管理外のファイルはstashの対象にならずそのまま...
stashした後別の作業を行いたいような場合は一度追加したファ...
*あるコミットを適用する [#g4b8d8e7]
$ git cherry-pick <コミットID>
で指定したコミットIDでの変更内容を適用できます。
*リモートリポジトリの登録・変更 [#sca1e9a7]
まだリモートリポジトリを登録していないときは
$ git remote add リポジトリ名[基本はorigin] リポジトリの...
すでに登録していて変更したいときは
$ git remote set-url リポジトリ名[基本はorigin] リポジト...
リポジトリ名はデフォルトはoriginなので、特に理由がなけれ...
*You asked me ... と出てリモートからpullが出来ない [#b84a...
論文添削などローカル間でやりとりを行う場合は、先にリモー...
リモートから取得したリポジトリについては、リモート設定の...
その上で、下の2つのどちらかを行う。
$ git config branch.ブランチ名.remote origin
$ git config branch.ブランチ名.merge refs/heads/ブランチ名
$ git push -u origin ブランチ名
* pushのメール通知 [#v9cdc590]
作成したプロジェクトのページから
Settings/Integrationsに移動する。~
一番下のService一覧よりEmails on pushを選択する。~
下の画像はEmails on pushのページである。~
Activeの欄にチェックして、Recipientsに送信先アドレスを改...
Send from committerで送り主をcommitした人かgitlabか選択で...
Save chagesで設定の保存。~
#ref(git_mail.png)
終了行:
#contents
* gitサーバ [#m4e231d9]
http://gitlab.arch.info.mie-u.ac.jp
*はじめに [#jcb5dcef]
gitlabの使用には専用のアカウントが必要となるので,
http://gitlab.arch.info.mie-u.ac.jp
から研究室用のメールアドレスを用いてアカウント登録を行う。~
取得したアカウントを用いてログインする。
次にprofile setting-> SSH keysで公開鍵の登録を行う。
画面の指示に従って、公開鍵の中身を登録する。~
公開鍵を作成していない人は、[[秘密鍵、公開鍵作成方法]]に...
*リポジトリの取得(ローカルリポジトリの作成) clone [#daaf5...
$ git clone git@gitlab.arch.info.mie-u.ac.jp:<リポジトリ...
で指定ディレクトリにリポジトリのデータを取ってくる事がで...
サブモジュールを含むレポジトリの場合は、
$ git clone --recursive git@gitlab.arch.info.mie-u.ac.jp...
とするか、clone後に
$ git submodule update --init
を実行する。ただし、サブモジュールのbranchは(no branch)に...
$ git checkout master
を実行する必要がある。
*編集したものをローカルリポジトリに反映 commit [#g4224ca0]
$ git commit -a
を実行するとエディタが起動されるので、コメントを記述する...
以下にあるgit addで一度でも追加されたファイルのみが反映さ...
*アイテムの追加 add [#fa9d73a0]
$ git add <ファイル名>
で指定ファイルがGitの追跡対象に追加される。
$ git add <ディレクトリ名>
でディレクトリ内を再帰的にaddすることが出来る。~
ローカルリポジトリへはgit commitしなければ反映されない。
*アイテムの削除 rm [#o03cab8c]
$ git rm --cached <ファイル名>
で指定ファイルがGitの追跡対象から外される。
オプションの--cachedを外すと作業ディレクトリ内の実ファイ...
$ git rm --cached -r <ディレクトリ名>
でディレクトリ内のファイルを再帰的にrmすることが出来る。~
これも、ローカルリポジトリへはgit commitしなければ反映さ...
*アイテムの移動 mv [#i9619692]
$ git mv <ファイル1> <ファイル2>
でファイル1からファイル2にリネーム(移動)できる。~
これも、ローカルリポジトリへはgit commitしなければ反映さ...
*リモートリポジトリへの反映 push [#ldeaa1cb]
$ git push
でローカルの状態をリモートに反映する事が出来る。
但し、自分がリモートの変更をpullしてから、pushするまでの...
なお、空のリモートレポジトリにpushする場合、masterブラン...
git push -u origin master
のようにリポジトリとブランチを明示的に指定する必要がある...
*ローカルリポジトリの更新 pull [#jdd5de44]
$ git pull
でリモートリポジトリの状態を取得し、リモートとローカルの...
このコマンドはリモートの状態の取得のみを行う、
$ git fetch
と、マージを行う
$ git merge
を両方行うものである。
pullやmergeではそれぞれの変更内容が干渉すると、conflict(...
*pushでのrejectの解決 [#g142d451]
自分がpushするまでに、他からのpushがあるなどしてrejectが...
$ git push
To git@git.arch.info.mie-u.ac.jp:testing
! [rejected] master -> master (non-fast-forward)
error: failed to push some refs to 'git@git.arch.info.mi...
To prevent you from losing history, non-fast-forward upd...
Merge the remote changes (e.g. 'git pull') before pushin...
'Note about fast-forwards' section of 'git push --help' ...
のように表示される。
この場合
$ git pull
でリモートとマージを行い、
$ git push
とすることで解決できる。
*pull/mergeでのconflictの解決 [#od55d9c3]
pullやmergeではマージ対象のそれぞれのファイルに干渉し合う...
$ git pull
Auto-merging m_test.c
CONFLICT (content): Merge conflict in m_test.c
Automatic merge failed; fix conflicts and then commit th...
のように表示される。
上の例ではconflictを起こしているファイルはm_test.cであり...
<<<<<<< HEAD
int main(){
=======
main(void){
>>>>>>> 1anb832159
のように差分が挿入される。
この部分を適当に編集して、
int main(void){
例えば、このようにしてconflictを解消したら
$ git commit -a
でコミットすることで解決できる。
*ローカルリポジトリを以前のコミットに戻す [#bad47009]
$ git reset --hard <コミットID>
でローカルリポジトリと作業ディレクトリを指定したコミット...
但し、reset前のコミットに戻る事が難しくなるので、必要なら...
コミットIDにはgit log等で確認できるSHAの他、現在の位置を...
*特定ファイルのみを以前のコミットに戻す [#e7cb61a0]
$ git checkout <コミットID> <ファイル名>
で作業ディレクトリのファイルを以前のコミットに戻せる。
ローカルリポジトリへはgit commitしなければ反映されない。
*以前のコミットを確認する [#m45a6fa4]
$ git checkout <コミットID>
で作業ディレクトリを指定したコミットの状態に戻せる。
確認後は
$ git checkout <ブランチ名>
で元のブランチに戻る。
*作業ディレクトリとローカルリポジトリとの差分を表示 [#of7...
$ git diff HEAD
で作業ディレクトリとローカルリポジトリの差分を表示する。
*以前のコミットのファイルを表示 [#q224f683]
$ git show <コミットID>:<ファイル名>
で指定したコミットでのファイルの内容が表示される。
*作業ディレクトリの現在の状態の表示 [#n055e630]
$ git status
で変更されたファイルやリモートからどれだけコミットされて...
*ファイルやディレクトリの更新履歴を見る [#l68e5446]
$ git log
でコミットの履歴が確認できる。
コミットID、Auithor、Date、コミットメッセージが表示される。
$ git log -p
とすると各コミットでのdiffも表示される。
$ git log --graph -all
とすると、コミットグラフが表示される。
*管理下に無いアイテムの削除 clean [#kf01c2da]
$ git clean -f -x
でGITの管理下にないファイルが削除される。
オプションの-fは、強制的に削除、-xは.gitignore指定された...
$ git clean -n -x
で削除されるファイルの一覧を表示できる(実際に削除はされ...
*タグ関連 [#h4772e79]
**タグ一覧 [#n48815f2]
$ git tag
一部のバージョンのみ一覧表示したい(フィルタリングしたい...
$ git tag -l 'v1.*'
とすると、"v1."で始まるタグのみ表示される。
**タグを付ける [#c876c140]
$ git tag -a v1.0 -m 'First release'
ただし、git pushしてもリモートレポジトリには反映されない。
リモートレポジトリにもタグを付ける場合は、下記のようにす...
$ git push origin v1.0
ローカルレポジトリのタグを全てリモートレポジトリに反映さ...
$ git push origin --tags
とする。ただし、複数のメンバで共有しているレポジトリの場...
**ローカルのタグを削除 [#y0865b23]
$ git tag -d TAGNAME
**リモートのタグを削除 [#a481c0e2]
(ローカルのタグを削除した上で)
$ git push origin :TAGNAME
*ブランチ関連処理 [#maf49bad]
**ローカルブランチの作成 [#zb1856dc]
$ git branch <ブランチ名>
でブランチを作成できる。
**ブランチの移動 [#tdb1f0f0]
$ git checkout <ブランチ名>
で異なるブランチに移動できる。
**リモートリポジトリとブランチを共有 [#xc4fd56b]
$ git push origin <ブランチ名>
でリモートにブランチを作る事が出来る。
一度作れば、次回からはgit pushで反映する対象に入る。
**リモートのブランチを取得 [#t2109f46]
$ git branch <ブランチ名> origin/<ブランチ名>
でローカルにブランチを取ってくる事が出来る。
一度取得すれば、次回からはgit pullで取得する対象に入る。
取得後は
$ git checkout <ブランチ名>
で移動できる。
**リモートのブランチを削除 [#w2594941]
$ git push --delete origin <ブランチ名>
**ブランチの一覧表示 [#jeac06c5]
$ git branch
でローカルブランチの一覧を表示できる。
$ git branch -r
でリモートのブランチの一覧を表示することも出来る。
*各ブランチのマージ [#sa7efe58]
$ git merge <ブランチ名>
で現在のブランチと指定したブランチをマージできる。~
マージ後は自動的にコミットされる。
*レポジトリの切り出し [#gb951717]
[設定]
$ MasterProject=CAR (切出すファイルの入ったレポジトリ)
$ SubProject=Engine (切出し対象のディレクトリ名=レポジ...
[切出し]
ローカルレポジトリを破壊するので、作業用ディレクトリ($Su...
cloneしている。マスターのプロジェクトディレクトリ内で作...
要注意(下記手順に従えばOK)。
$ git clone git:$MasterProject $SubProject
$ cd $SubProject
$ git filter-branch --subdirectory-filter $SubProject HEAD
$ git remote set-url origin git:$SubProject
$ git push -u origin --all
[切出したレポジトリをサブモジュールとして登録]
下記作業は元となったマスター側のディレクトリ内で行う。
$ cd ../$MasterProject
$ git rm -r $SubProject
$ git submodule add git:$SubModule $SubModule
$ git commit
$ git push
*filter-branch [#cc2d49c5]
**ファイル、ディレクトリ移動時にログを残す [#u550eb6b]
$ git filter-branch -f --tree-filter "perl ~muto/user-sc...
**リポジトリ内からファイル、ディレクトリを削除する [#s39c...
$ git filter-branch -f --tree-filter "perl ~muto/user-sc...
*ファイルを変更してからブランチを切る [#a16b14c6]
何らかの作業をしてから、実は新しいブランチで作業すべきだ...
そのままだとブランチを切る事が出来ません。
その場合、
$ git stash save
で一旦変更した内容をstashに待避します。直前のcommit以降の...
その後
$ git branch new_branch
$ git checkout new_branch
等でブランチを移動し、
$ git stash apply
で待避した変更を書き戻して元に戻します。
ただし、Git管理外のファイルはstashの対象にならずそのまま...
stashした後別の作業を行いたいような場合は一度追加したファ...
*あるコミットを適用する [#g4b8d8e7]
$ git cherry-pick <コミットID>
で指定したコミットIDでの変更内容を適用できます。
*リモートリポジトリの登録・変更 [#sca1e9a7]
まだリモートリポジトリを登録していないときは
$ git remote add リポジトリ名[基本はorigin] リポジトリの...
すでに登録していて変更したいときは
$ git remote set-url リポジトリ名[基本はorigin] リポジト...
リポジトリ名はデフォルトはoriginなので、特に理由がなけれ...
*You asked me ... と出てリモートからpullが出来ない [#b84a...
論文添削などローカル間でやりとりを行う場合は、先にリモー...
リモートから取得したリポジトリについては、リモート設定の...
その上で、下の2つのどちらかを行う。
$ git config branch.ブランチ名.remote origin
$ git config branch.ブランチ名.merge refs/heads/ブランチ名
$ git push -u origin ブランチ名
* pushのメール通知 [#v9cdc590]
作成したプロジェクトのページから
Settings/Integrationsに移動する。~
一番下のService一覧よりEmails on pushを選択する。~
下の画像はEmails on pushのページである。~
Activeの欄にチェックして、Recipientsに送信先アドレスを改...
Send from committerで送り主をcommitした人かgitlabか選択で...
Save chagesで設定の保存。~
#ref(git_mail.png)
ページ名: