[
トップ
] [
新規
|
一覧
|
単語検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
#menu(howto/MenuBar)
* howto/git/forthefirsttime [#ja1835b8]
#contents
** 一行メモ [#cbf3edaa]
- gitコマンドの説明 https://orange.eit.hirosaki-u.ac.jp/p...
- GitHubで使われている実用英語コメント集 https://qiita.co...
#comment
* マニュアル・リンクなど [#da0efa11]
- [[The entire Pro Git book>https://git-scm.com/book/ja/v...
Pro Git book 2nd Edition(2014), 1-3,5章は必読 ([[ ここ >...
- [[みんなでつかう - ベアリポジトリとクローン,リモートリ...
gitのversionが古い
- [[gitの使用方法メモ>http://d.hatena.ne.jp/teematsu/touc...
detached HEAD の説明あり。このページ内でdetachedを検索せよ
- [[サルでもわかるGit入門>http://www.backlog.jp/git-guide...
WindowsのGUIアプリとしてのラッパーのようだ。コマンドも可...
- [[【GitHub超初心者入門】この前初めてGitHubを... - Qiita...
- [[GitHub 入門 - Qiita>http://qiita.com/ay3/items/8d758e...
* はじめてのGit [#g1c0e11a]
git(ギット)はソフトウェアなどのバージョン管理をするツー...
//以下の文章の古い版は word文章として [[ここ>https://oran...
//-------------------------------------------------------...
** 予備知識 [#o495f9e6]
*** リポジトリ [#z353909f]
開発中のソースコードの版(バージョン)を蓄えているものを...
gitでは、版管理の対象はプログラムソースコードに限らず、フ...
ファイルサイズが大きいものは動作が重くなるためやめたほう...
*** 作業ディレクトリ [#cc512af5]
通常のディレクトリのように、開発中のソースコードを置いて...
これをgitで版管理している場合、この作業ディレクトリには "...
版管理に関する情報や全ての版が保存されている。
作業ディレクトリ内のファイルは、gitの版管理を意識せずに普...
*** ローカルリポジトリ [#uc5b9b64]
ログインしてシェルのプロンプトが出ており、カレントディレ...
ここにあるリポジトリのことをローカルリポジトリと呼ぶ(単...
開発作業はすべてローカルリポジトリがある作業ディレクトリ...
*** リモートリポジトリ [#h499dce8]
ローカルリポジトリは、他の"&COLOR(,YELLOW){上流};"にある...
この上流のリポジトリのことを、リモートリポジトリと呼ぶ(...
上流とは版のデータを受け渡しできる。
*** ベアリポジトリ [#v02a1f73]
作業ディレクトリを持たないリポジトリ(".git"ディレクトリ...
リモートリポジトリはふつうはベアリポジトリである。~
~
上流のリポジトリのポンチ絵~
#ref(upstream20231016.png,left,30%,nowrap)
** 新しい版のコミットまでの流れ [#ne4a8e27]
作業ディレクトリ上で、
(1) ファイルを新規作成したり、修正する。
(2) そのファイルを&COLOR(,YELLOW){ステージ};に載せる(ス...
インデックスやキャッシュとも言われる)。
(3) コミット(commit)する。これでステージングされたファ...
ローカルリポジトリの内容をリモートリポジトリに送る(&COLOR...
逆に他の人の作業内容を取り込むこともできる(&COLOR(,YELLOW...
自分ひとりだけで複数のローカルリポジトリを開発に利用する...
*** もっと予備知識 [#t43d56c5]
- 作業ディレクトリにあるファイルのうち、&COLOR(,YELLOW){...
- 版は分岐できる。木の枝のような一つ一つの分岐は、&COLOR(...
(デフォルトでは分岐はひとつのみであり、masterという名前...
正確には、ブランチはひとつのコミットに紐づいている。
このコミットを修正してコミットすると、ブランチは修正され...
コミットをさかのぼって更新履歴を知ることはできるが、どれ...
- ブランチは自由に作成でき、作業ディレクトリの内容をどれ...
(例えば、リリース予定のブランチ、機能Aを追加中のブランチ...
を作成し、切り替えて使える。)
- コミットの記録をもとに、ありとあらゆる事を調べることが...
- 作業ディレクトリにある追跡対象のファイルは、次のいずれ...
1) コミット済(版として登録されているファイルと同じ)~
2) ステージ済(コミットする予定として登録したファイルと同...
3) 修正中(未コミット、未ステージングのファイル。ステージ...
~作業ディレクトリにあるファイルの状態のポンチ絵~
#ref(workingdir20231016.png,left,30%,nowrap)
- リモートリポジトリ("上流"のリポジトリ)は、ローカルリ...
通常、複数の人が共通に使っているリポジトリである。これに...
-- 正確には、リモートリポジトリのブランチを、ローカルリポ...
追跡している形である。
-- ローカルリポジトリに加えたコミットの内容を pushしたり...
また、ローカルリポジトリは、複数のリモートリポジトリを利...
リモートリポジトリをひとつだけ使っている場合には、ふつう ...
- ブランチの追跡のポンチ絵
#ref(repository20231015.jpg,left,50%,nowrap)
//-------------------------------------------------------...
** 基本的な操作(リポジトリの作成) [#i31a4e96]
以下では、ファイル名、ディレクトリ名、注釈などはすべて英...
*** 最初に一度だけする設定(マシン毎) [#w471c1f4]
$ git config --global user.name "名前"
$ git config --global user.email "メールアドレス"
$ git config --global core.editor emacs
$ git config --global push.default simple
*** 新規に、ローカルリポジトリを作る [#o45c9ab2]
版管理したい作業ディレクトリに移動して、初期化する(.git...
$ cd 作業ディレクトリ
$ git init
*** 新規に、リモートリポジトリ(ベアリポジトリ)を作って...
マシン Aにベアリポジトリを作って、マシン Bにローカルリポ...
マシン Aで
$ mkdir ベアリポジトリのディレクトリ名.git
$ cd ベアリポジトリのディレクトリ名.git #(*)
$ git init --bare
マシン Bで
$ cd 作業ディレクトリ
$ git init
$ git remote add origin ベアリポジトリのURL
#URLは上の(*)を示す「ssh://xxx@yyy:/~/...
// $ git add ファイルやディレクトリ #下記参照
// $ git commit -m "注釈" #下記参照
$ git push --set-upstream origin master
なお、ディレクトリが異なれば、マシン A, Bは同じPCであって...
*** 既存のリモートリポジトリのコピー(クローン)をしてロ...
$ git clone ベアリポジトリのURL 作業ディレクトリ名
** 基本的な操作(日々の作業など) [#p3f2b03d]
*** ファイルをステージングし、ローカルリポジトリにコミッ...
$ git add ファイル #ファイル(ディレクトリも指定が可...
#初めてaddされたファイルであれば、...
$ git commit -m "注釈" #ステージングされたファイルを...
#注釈は英語で!
*** ローカルリポジトリの更新内容をリモートリポジトリに送...
$ git push
*** リモートリポジトリの更新内容を作業ディレクトリに取り...
$ git fetch #取り込むだけ
$ git pull #取り込んで、作業ディレクトリのファイルに...
*** 新しくローカルリポジトリにブランチを作る [#t7e124af]
$ git checkout -b ブランチ名 #ブランチを作成し、作成...
*** 既存の別のブランチに切り替える [#a0c4ab3b]
$ git checkout ブランチ名 #既存のブランチに切り替...
*** 新しくローカルリポジトリにブランチを作り、リモートリ...
$ git checkout -b ブランチ名 #ブランチを作成し、作成...
$ git push --set-upstream origin ブランチ名
#リモートリポジトリoriginにブランチをpushする(ブ...
#originに作成されたブランチを追跡するように設定す...
*** リモートリポジトリにあるブランチを追跡するように、ロ...
$ git checkout --track origin/ブランチ名
*** 更新内容の表示など [#o8e508ef]
$ git fetch #リモートリポジトリ...
$ git remote -v ; git branch -vv #リモートリポジトリ...
$ git status #作業ディレクトリの...
$ git log -15 --oneline --decorate --graph --all #コ...
$ gitk --all #コ...
$ git branch -a #すべてのブランチを表示
$ git tag #すべてのタグを表示
//-------------------------------------------------------...
** 基本的な操作(複数のブランチ利用) [#w4d39b25]
*** あるSHA1のコミットにタグを付ける [#l8e698bb]
git tag tmp_hoge a5f38c9 #ローカルリポジトリでタグを付...
*** ブランチを削除する [#nf3bd6a0]
git branch -d hogehoge #ローカルリポジトリに...
git branch -d -r origin/hogehoge #ローカルリポジトリに...
git push origin --delete hogehoge #リモートリポジトリの...
*** 差分をみる [#jb466541]
git diff --cached #親コミットとステージの差分
git diff master_20190603 HEAD nameless_pot.c #master_2...
*** helpコマンド [#p6a93489]
git help rev-parse
*** masterをマージする [#j06cf918]
git merge --no-commit --no-ff master
#dry-run的なことがされるので確認後、マージをアボートか...
#git merge --abort
#git commit -m "merge branch master into hogehoge"
*** 作業ディレクトリのファイルのうち、追跡対象になってい...
git ls-files -o --exclude-standard
gitlsfiles.py #python3環境のみ(~okazaki/util/com内)
//-------------------------------------------------------...
** 練習 [#a117f094]
マシンalliumに作成中のプログラムがあるディレクトリ ~/prac...
*** 最初に一度だけする設定をせよ [#ff6268b7]
git config --global user.name 'john smith' #SPCが含...
git config --global user.email smith@ivy #適当でよい
git config --global core.editor emacs
git config --global push.default simple
git config -l #設定内容の確認
*** pracディレクトリを版管理するために、ローカルリポジト...
cd ~/prac
git init
gitk --all & #以下のコマンド実行前後で、gitkのメニュー...
#また git status も実行し、表示内容がどう...
git add *.c #メタキャラが使える。各自、自分の状況に合わ...
git add *.h
git add makefile
git add 他にもあれば追加 #大きなファイルは追加しない
git commit -m "the first commit" #SPCが含まれるのでク...
gcc -o main.x main.c
./main.x
(注1)コンパイル・リンクでできた実行ファイルは、ふつうリ...
(注2)gitkコマンドはXウィンドウシステムを介してGUIウィン...
GUIウィンドウを表示するには、sshコマンドに -Y オプション...
もしくは DISPLAY環境変数を設定する必要がある。
*** 修正してコミットせよ(1回以上)。以下のよく使うコマ...
emacs main.c #コメントを入れるとか、空行を追加すると...
gcc -o main.x main.c
./main.x
git add main.c
git commit -m "modify main.c"
作業ディレクトリの状態を確認するときによく使うコマンド、...
git remote -v ; git branch -vv #ブランチを表示
git status #作業ディレクトリの状...
git log -15 --oneline --decorate --graph --all #コミッ...
gitk --all
git diff #作業ディレクトリと親コミットとの差...
git diff --cached #ステージと親コミットとの差分表示
*** .gitignoreファイルを作り、不要な出力を抑止する [#f482...
作業ディレクトリに追跡対象ではないファイルがあると git st...
出力させたくない場合、.gitignoreファイルにファイル名を記...
emacs .gitignore
*~ #例えば、この2行を
*.x #.gitignoreに記載する。
git add .gitignore
git commit -m "add .gitignore"
*** ベアリポジトリを作り、pushしてみよ(スキップ) [#q0ee...
cd ~
mkdir repgit; cd repgit
mkdir prac.git; cd prac.git
git init --bare
#~/repgitディレクトリの中に prac.gitというベアリポジトリ...
cd ~/prac
git remote add origin ssh://yourname@hostname:/home/you...
#originに URLを登録
git push --set-upstream origin master
#originのmasterブランチにpushするとともに、
#ローカルリポジトリのカレントブランチ(masterブラン...
#yournameはログインID
#hostnameはivy.eit.hirosaki-u.ac.jpなど
*** ベアリポジトリからクローンしてみよ(スキップ) [#v1bc...
cd ~
mkdir tmp; cd tmp
git clone ssh://yourname@hostname:/home/yourname/repgit/...
*** クローンしたリポジトリの作業ディレクトリで、ファイル...
cd ~/tmp/prac2
emacs main.c
git add main.c
git commit -m "modify main.c in prac2"
git push
cd ~/prac
git fetch
git pull
prac2とpracで更新内容などを見てみよ
git remote -v ; git branch -vv
git log -15 --oneline --decorate --graph --all
~/tmp/prac2はこのあと使わないので削除して構わない。
//-------------------------------------------------------...
* ソースからgitをインストールする例 [#q791e80b]
ブラウザからダウンロード https://github.com/git/git/arch...
$ unzip git-master.zip
$ cd git-master
$ autoconf
$ ./configure --prefix=$HOME/bin
$ make all # doc info はめんどいらしいので除く
$ make install # install-doc install-html install-info ...
# バージョンは、2.2.0.GITだった。
| git-master/INSTALLには次のように記載あり
| $ make prefix=$HOME/bin all doc info
| $ make prefix=$HOME/bin install install-doc install-ht...
ブラウザからダウンロード https://www.kernel.org/pub/soft...
$ tar xvfz git-manpages-2.2.0.tar.gz -C $HOME/bin/share...
MANPATH=$HOME/bin/share/man:$MANPATH を .bashrcに追加する
(補足) zlibが無かった場合には makeできないので、下のよう...
再度 git-masterディレクトリで ./configure --prefix=$HOME...
としてから makeする。
$ wget http://zlib.net/zlib-1.2.8.tar.gz
$ md5sum zlib-1.2.8.tar.gz
$ tar xvfz zlib-1.2.8.tar.gz
$ cd zlib-1.2.8
$ ./configure --prefix=$HOME/bin
$ make
$ make install
* 練習(しなくてもよい) [#te2e86e9]
** 練習1 [#fbdc80b6]
ivy.eit.hirosaki-u.ac.jpにログインして、"最初に一度だけ...
次に、適当なディレクトリで、
$ git clone git://git.kernel.org/pub/scm/git/git.git #作...
$ cd git
$ git remote -v
$ git branch -vv
$ git status
$ git log --oneline --decorate --graph --all
一画面下にスクロール SPC
一画面上にスクロール w
一行上にスクロール j
一行下にスクロール k
下に検索 / ⇒ origin/masterという文字列...
上に検索 ?
次のもの検索 n
一番下を表示 ESC >
一番上を表示 ESC <
終了 q
$ DISPLAY=hogehoge:0 gitk --all # ssh -Yでログインし...
$ DISPLAY=hogehoge:0 gitk # hogehogeはウィンド...
$ DISPLAY=hogehoge:0 gitk --all &
$ git log --oneline --decorate --graph --all | tail
$ git checkout -b mytest e83c51633
$ git help checkout
$ git status
$ git log --oneline --decorate --graph --all | tail
$ make #失敗するので、
Makefileの
LIBS= -lssl
を
LIBS= -lssl -lcrypto -lz
に変更して、再度makeする
$
$ git status
$ git add -u
$ git status
$ git commit -m "modify Makefile"
$ git status
$ git branch -vv
$ git log --oneline --decorate --graph --all | head ; ...
git log --oneline --decorate --graph --all | tail
また、gitkのメニューから更新を選んで、ログを確認して、終...
** 練習2(1のつづき) [#g3a27d3c]
$ mkdir ../hoge; cd../hoge #適当なディレクトリを作り、...
$ cp../git/{*.[ch],Makefile,README} .
$ ls
Makefile cache.h commit-tree.c read-cache.c show-d...
README cat-file.c init-db.c read-tree.c update...
$ git init
$ git add *.[ch] Makefile README
$ git status
$ git commit -m "the first commit"
$ git log --oneline --decorate --graph --all
$ git remote -v ; git branch-vv
たとえば、emacsでMakefileをオリジナルのもの(LIBS= -lssl...
$ git diff
$ git add Makefile
$ git commit -m "make Makefile the original"
$ git log --oneline --decorate --graph --all
$ git checkout -b testb
$ git branch -vv
emacsで MakefileのLIBSを -lssl -lcrypto -lz にする。
$ git add Makefile
$ git commit -m "modify Makefile"
$ git log --oneline --decorate --graph --all
$ git branch -vv
$ git checkout master
$ git branch -vv
emacsで MakefileのLIBSを -lssl -lcrypto にする。
$ git add Makefile
$ git commit -m "modify Makefile, again"
$ git log --oneline --decorate --graph --all
** 遊び(練習1のつづき) [#r1016c37]
cd ../gitなどで、練習1のディレクトリに移動する。
最初のgitを動かしてみる。そのままでは実行時にエラーにな...
read-cache.cの228行目付近のif文をコメントアウトして、mak...
- if (size > sizeof(structcache_header))
+// if (size > sizeof(structcache_header))
map = mmap(NULL, size,PROT_READ,...
$ ./init-db # .dircacheディレクトリが作成される(.git相...
$ ./update-cache *.[ch] Makefile README #update-cacheが...
$ ./write-tree #write-tree,com...
6ca44177a19e6ca8f2f761b7415a4360d2db6b8e
$ ./commit-tree 6ca44177a19e6ca8f2f761b7415a4360d2db6b8e...
the first commit
eof
Committing initial tree 6ca44177a19e6ca8f2f761b7415a4360...
bab38708b02450867071a94a9fce18123597835d
$ cat `./cat-file bab38708b02450867071a94a9fce1812359783...
tree6ca44177a19e6ca8f2f761b7415a4360d2db6b8e
author okazaki,isao,,<okazaki@ivy> Fri Jun 23 14:41:39 2...
committer okazaki,isao,,<okazaki@ivy> Fri Jun 23 14:41:3...
the first commit
$ ./read-tree 6ca44177a19e6ca8f2f761b7415a4360d2db6b8e #...
100664 Makefile(dfa152bcc0e5f29d5a2db9a482d7e65660a6fe61)
100664 README (665025b11ce8fb16fadb7daebf77cb54a2ae39a1)
100664 cache.h(9e1bee21e17c134a2fb008db62679048fc819528)
100664 cat-file.c(fd690acc02ef9c06d7c4c3541f69b10ca4b4f8...
100664 commit-tree.c(a4a8c3d9ef0c4cc6c82b96b5d1a91ac6d3b...
100664 init-db.c(0eaa053919e0cc400ab9bc40d9272360117e6978)
100664 read-cache.c(4d3c01ab27d6745be53d5caf862e5ce4d939...
100664 read-tree.c(ec0f167a6a505659e5af6911c97f465506534...
100664 show-diff.c(00a29c403e751c2a2a61eb24fa2249c8956d1...
100664 update-cache.c(aff074c63ac827801a7d02ff9278136595...
100664 write-tree.c(7abeeba116b2b251c12ae32c7b38cb048199...
$ ./show-diff
Makefile: ok
README: ok
cache.h: ok
cat-file.c: ok
commit-tree.c: ok
init-db.c: ok
read-cache.c: ok
read-tree.c: ok
show-diff.c: ok
update-cache.c: ok
write-tree.c: ok
次に、emacsでread-cache.cの228行目付近にfprintfを追加(...
$ ./show-diff
Makefile: ok
README: ok
cache.h: ok
cat-file.c: ok
commit-tree.c: ok
init-db.c: ok
read-cache.c: 4d3c01ab27d6745be53d5caf862e5ce4d939961c
--- - 2017-06-23 14:54:17.547672847 +0900
+++ read-cache.c 2017-06-23 14:53:00.644494732 +0...
@@ -228,6 +228,8 @@
map = NULL;
size = st.st_size;
errno = EINVAL;
+fprintf( stderr, "size= %d\n", size );
+fprintf( stderr,"sizeof = %d\n", sizeof(struct cache_he...
// if (size > sizeof(struct cache_header))
map = mmap(NULL, size,PROT_READ,...
}
read-tree.c: ok
show-diff.c: ok
update-cache.c: ok
write-tree.c: ok
$ ./update-cacheread-cache.c
$ ./write-tree
792883deac0a678d1975ddb4acce30ed15010149
$ ./commit-tree 792883deac0a678d1975ddb4acce30ed15010149 \
-p bab38708b02450867071a94a9fce18123597835d...
add fprintf
eof
8af70d35558e4226155fdad489654a0ece5ee196
$ cat `./cat-file 8af70d35558e4226155fdad489654a0ece5ee1...
tree 792883deac0a678d1975ddb4acce30ed15010149
parent bab38708b02450867071a94a9fce18123597835d
author okazaki,isao,,<okazaki@ivy> Fri Jun 23 15:14:12 2...
committer okazaki,isao,,<okazaki@ivy> Fri Jun 23 15:14:1...
add fprintf
最初のコミットのツリー(6ca44177a19e6ca8f2f761b7415a4360...
read-cache.c(4d3c01ab27d6745be53d5caf862e5ce4d939961c)...
とってみる。
$ ./cat-file 4d3c01ab27d6745be53d5caf862e5ce4d939961c
temp_git_file_nV0xt4: blob
$ diff temp_git_file_nV0xt4read-cache.c
230a231,232
> fprintf( stderr,"size = %d\n", size );
> fprintf( stderr,"sizeof = %d\n", sizeof(struct cache_h...
使い方は次を参考にすると良い。
"git(1)の最初のコミットをビルドして使ってみた"http://qi...
"Gitの最初の姿"http://daretoku-unix.blogspot.jp/2015/03...
"初期のGitコマンドのソースコード"http://tanakahx.github...
終了行:
#menu(howto/MenuBar)
* howto/git/forthefirsttime [#ja1835b8]
#contents
** 一行メモ [#cbf3edaa]
- gitコマンドの説明 https://orange.eit.hirosaki-u.ac.jp/p...
- GitHubで使われている実用英語コメント集 https://qiita.co...
#comment
* マニュアル・リンクなど [#da0efa11]
- [[The entire Pro Git book>https://git-scm.com/book/ja/v...
Pro Git book 2nd Edition(2014), 1-3,5章は必読 ([[ ここ >...
- [[みんなでつかう - ベアリポジトリとクローン,リモートリ...
gitのversionが古い
- [[gitの使用方法メモ>http://d.hatena.ne.jp/teematsu/touc...
detached HEAD の説明あり。このページ内でdetachedを検索せよ
- [[サルでもわかるGit入門>http://www.backlog.jp/git-guide...
WindowsのGUIアプリとしてのラッパーのようだ。コマンドも可...
- [[【GitHub超初心者入門】この前初めてGitHubを... - Qiita...
- [[GitHub 入門 - Qiita>http://qiita.com/ay3/items/8d758e...
* はじめてのGit [#g1c0e11a]
git(ギット)はソフトウェアなどのバージョン管理をするツー...
//以下の文章の古い版は word文章として [[ここ>https://oran...
//-------------------------------------------------------...
** 予備知識 [#o495f9e6]
*** リポジトリ [#z353909f]
開発中のソースコードの版(バージョン)を蓄えているものを...
gitでは、版管理の対象はプログラムソースコードに限らず、フ...
ファイルサイズが大きいものは動作が重くなるためやめたほう...
*** 作業ディレクトリ [#cc512af5]
通常のディレクトリのように、開発中のソースコードを置いて...
これをgitで版管理している場合、この作業ディレクトリには "...
版管理に関する情報や全ての版が保存されている。
作業ディレクトリ内のファイルは、gitの版管理を意識せずに普...
*** ローカルリポジトリ [#uc5b9b64]
ログインしてシェルのプロンプトが出ており、カレントディレ...
ここにあるリポジトリのことをローカルリポジトリと呼ぶ(単...
開発作業はすべてローカルリポジトリがある作業ディレクトリ...
*** リモートリポジトリ [#h499dce8]
ローカルリポジトリは、他の"&COLOR(,YELLOW){上流};"にある...
この上流のリポジトリのことを、リモートリポジトリと呼ぶ(...
上流とは版のデータを受け渡しできる。
*** ベアリポジトリ [#v02a1f73]
作業ディレクトリを持たないリポジトリ(".git"ディレクトリ...
リモートリポジトリはふつうはベアリポジトリである。~
~
上流のリポジトリのポンチ絵~
#ref(upstream20231016.png,left,30%,nowrap)
** 新しい版のコミットまでの流れ [#ne4a8e27]
作業ディレクトリ上で、
(1) ファイルを新規作成したり、修正する。
(2) そのファイルを&COLOR(,YELLOW){ステージ};に載せる(ス...
インデックスやキャッシュとも言われる)。
(3) コミット(commit)する。これでステージングされたファ...
ローカルリポジトリの内容をリモートリポジトリに送る(&COLOR...
逆に他の人の作業内容を取り込むこともできる(&COLOR(,YELLOW...
自分ひとりだけで複数のローカルリポジトリを開発に利用する...
*** もっと予備知識 [#t43d56c5]
- 作業ディレクトリにあるファイルのうち、&COLOR(,YELLOW){...
- 版は分岐できる。木の枝のような一つ一つの分岐は、&COLOR(...
(デフォルトでは分岐はひとつのみであり、masterという名前...
正確には、ブランチはひとつのコミットに紐づいている。
このコミットを修正してコミットすると、ブランチは修正され...
コミットをさかのぼって更新履歴を知ることはできるが、どれ...
- ブランチは自由に作成でき、作業ディレクトリの内容をどれ...
(例えば、リリース予定のブランチ、機能Aを追加中のブランチ...
を作成し、切り替えて使える。)
- コミットの記録をもとに、ありとあらゆる事を調べることが...
- 作業ディレクトリにある追跡対象のファイルは、次のいずれ...
1) コミット済(版として登録されているファイルと同じ)~
2) ステージ済(コミットする予定として登録したファイルと同...
3) 修正中(未コミット、未ステージングのファイル。ステージ...
~作業ディレクトリにあるファイルの状態のポンチ絵~
#ref(workingdir20231016.png,left,30%,nowrap)
- リモートリポジトリ("上流"のリポジトリ)は、ローカルリ...
通常、複数の人が共通に使っているリポジトリである。これに...
-- 正確には、リモートリポジトリのブランチを、ローカルリポ...
追跡している形である。
-- ローカルリポジトリに加えたコミットの内容を pushしたり...
また、ローカルリポジトリは、複数のリモートリポジトリを利...
リモートリポジトリをひとつだけ使っている場合には、ふつう ...
- ブランチの追跡のポンチ絵
#ref(repository20231015.jpg,left,50%,nowrap)
//-------------------------------------------------------...
** 基本的な操作(リポジトリの作成) [#i31a4e96]
以下では、ファイル名、ディレクトリ名、注釈などはすべて英...
*** 最初に一度だけする設定(マシン毎) [#w471c1f4]
$ git config --global user.name "名前"
$ git config --global user.email "メールアドレス"
$ git config --global core.editor emacs
$ git config --global push.default simple
*** 新規に、ローカルリポジトリを作る [#o45c9ab2]
版管理したい作業ディレクトリに移動して、初期化する(.git...
$ cd 作業ディレクトリ
$ git init
*** 新規に、リモートリポジトリ(ベアリポジトリ)を作って...
マシン Aにベアリポジトリを作って、マシン Bにローカルリポ...
マシン Aで
$ mkdir ベアリポジトリのディレクトリ名.git
$ cd ベアリポジトリのディレクトリ名.git #(*)
$ git init --bare
マシン Bで
$ cd 作業ディレクトリ
$ git init
$ git remote add origin ベアリポジトリのURL
#URLは上の(*)を示す「ssh://xxx@yyy:/~/...
// $ git add ファイルやディレクトリ #下記参照
// $ git commit -m "注釈" #下記参照
$ git push --set-upstream origin master
なお、ディレクトリが異なれば、マシン A, Bは同じPCであって...
*** 既存のリモートリポジトリのコピー(クローン)をしてロ...
$ git clone ベアリポジトリのURL 作業ディレクトリ名
** 基本的な操作(日々の作業など) [#p3f2b03d]
*** ファイルをステージングし、ローカルリポジトリにコミッ...
$ git add ファイル #ファイル(ディレクトリも指定が可...
#初めてaddされたファイルであれば、...
$ git commit -m "注釈" #ステージングされたファイルを...
#注釈は英語で!
*** ローカルリポジトリの更新内容をリモートリポジトリに送...
$ git push
*** リモートリポジトリの更新内容を作業ディレクトリに取り...
$ git fetch #取り込むだけ
$ git pull #取り込んで、作業ディレクトリのファイルに...
*** 新しくローカルリポジトリにブランチを作る [#t7e124af]
$ git checkout -b ブランチ名 #ブランチを作成し、作成...
*** 既存の別のブランチに切り替える [#a0c4ab3b]
$ git checkout ブランチ名 #既存のブランチに切り替...
*** 新しくローカルリポジトリにブランチを作り、リモートリ...
$ git checkout -b ブランチ名 #ブランチを作成し、作成...
$ git push --set-upstream origin ブランチ名
#リモートリポジトリoriginにブランチをpushする(ブ...
#originに作成されたブランチを追跡するように設定す...
*** リモートリポジトリにあるブランチを追跡するように、ロ...
$ git checkout --track origin/ブランチ名
*** 更新内容の表示など [#o8e508ef]
$ git fetch #リモートリポジトリ...
$ git remote -v ; git branch -vv #リモートリポジトリ...
$ git status #作業ディレクトリの...
$ git log -15 --oneline --decorate --graph --all #コ...
$ gitk --all #コ...
$ git branch -a #すべてのブランチを表示
$ git tag #すべてのタグを表示
//-------------------------------------------------------...
** 基本的な操作(複数のブランチ利用) [#w4d39b25]
*** あるSHA1のコミットにタグを付ける [#l8e698bb]
git tag tmp_hoge a5f38c9 #ローカルリポジトリでタグを付...
*** ブランチを削除する [#nf3bd6a0]
git branch -d hogehoge #ローカルリポジトリに...
git branch -d -r origin/hogehoge #ローカルリポジトリに...
git push origin --delete hogehoge #リモートリポジトリの...
*** 差分をみる [#jb466541]
git diff --cached #親コミットとステージの差分
git diff master_20190603 HEAD nameless_pot.c #master_2...
*** helpコマンド [#p6a93489]
git help rev-parse
*** masterをマージする [#j06cf918]
git merge --no-commit --no-ff master
#dry-run的なことがされるので確認後、マージをアボートか...
#git merge --abort
#git commit -m "merge branch master into hogehoge"
*** 作業ディレクトリのファイルのうち、追跡対象になってい...
git ls-files -o --exclude-standard
gitlsfiles.py #python3環境のみ(~okazaki/util/com内)
//-------------------------------------------------------...
** 練習 [#a117f094]
マシンalliumに作成中のプログラムがあるディレクトリ ~/prac...
*** 最初に一度だけする設定をせよ [#ff6268b7]
git config --global user.name 'john smith' #SPCが含...
git config --global user.email smith@ivy #適当でよい
git config --global core.editor emacs
git config --global push.default simple
git config -l #設定内容の確認
*** pracディレクトリを版管理するために、ローカルリポジト...
cd ~/prac
git init
gitk --all & #以下のコマンド実行前後で、gitkのメニュー...
#また git status も実行し、表示内容がどう...
git add *.c #メタキャラが使える。各自、自分の状況に合わ...
git add *.h
git add makefile
git add 他にもあれば追加 #大きなファイルは追加しない
git commit -m "the first commit" #SPCが含まれるのでク...
gcc -o main.x main.c
./main.x
(注1)コンパイル・リンクでできた実行ファイルは、ふつうリ...
(注2)gitkコマンドはXウィンドウシステムを介してGUIウィン...
GUIウィンドウを表示するには、sshコマンドに -Y オプション...
もしくは DISPLAY環境変数を設定する必要がある。
*** 修正してコミットせよ(1回以上)。以下のよく使うコマ...
emacs main.c #コメントを入れるとか、空行を追加すると...
gcc -o main.x main.c
./main.x
git add main.c
git commit -m "modify main.c"
作業ディレクトリの状態を確認するときによく使うコマンド、...
git remote -v ; git branch -vv #ブランチを表示
git status #作業ディレクトリの状...
git log -15 --oneline --decorate --graph --all #コミッ...
gitk --all
git diff #作業ディレクトリと親コミットとの差...
git diff --cached #ステージと親コミットとの差分表示
*** .gitignoreファイルを作り、不要な出力を抑止する [#f482...
作業ディレクトリに追跡対象ではないファイルがあると git st...
出力させたくない場合、.gitignoreファイルにファイル名を記...
emacs .gitignore
*~ #例えば、この2行を
*.x #.gitignoreに記載する。
git add .gitignore
git commit -m "add .gitignore"
*** ベアリポジトリを作り、pushしてみよ(スキップ) [#q0ee...
cd ~
mkdir repgit; cd repgit
mkdir prac.git; cd prac.git
git init --bare
#~/repgitディレクトリの中に prac.gitというベアリポジトリ...
cd ~/prac
git remote add origin ssh://yourname@hostname:/home/you...
#originに URLを登録
git push --set-upstream origin master
#originのmasterブランチにpushするとともに、
#ローカルリポジトリのカレントブランチ(masterブラン...
#yournameはログインID
#hostnameはivy.eit.hirosaki-u.ac.jpなど
*** ベアリポジトリからクローンしてみよ(スキップ) [#v1bc...
cd ~
mkdir tmp; cd tmp
git clone ssh://yourname@hostname:/home/yourname/repgit/...
*** クローンしたリポジトリの作業ディレクトリで、ファイル...
cd ~/tmp/prac2
emacs main.c
git add main.c
git commit -m "modify main.c in prac2"
git push
cd ~/prac
git fetch
git pull
prac2とpracで更新内容などを見てみよ
git remote -v ; git branch -vv
git log -15 --oneline --decorate --graph --all
~/tmp/prac2はこのあと使わないので削除して構わない。
//-------------------------------------------------------...
* ソースからgitをインストールする例 [#q791e80b]
ブラウザからダウンロード https://github.com/git/git/arch...
$ unzip git-master.zip
$ cd git-master
$ autoconf
$ ./configure --prefix=$HOME/bin
$ make all # doc info はめんどいらしいので除く
$ make install # install-doc install-html install-info ...
# バージョンは、2.2.0.GITだった。
| git-master/INSTALLには次のように記載あり
| $ make prefix=$HOME/bin all doc info
| $ make prefix=$HOME/bin install install-doc install-ht...
ブラウザからダウンロード https://www.kernel.org/pub/soft...
$ tar xvfz git-manpages-2.2.0.tar.gz -C $HOME/bin/share...
MANPATH=$HOME/bin/share/man:$MANPATH を .bashrcに追加する
(補足) zlibが無かった場合には makeできないので、下のよう...
再度 git-masterディレクトリで ./configure --prefix=$HOME...
としてから makeする。
$ wget http://zlib.net/zlib-1.2.8.tar.gz
$ md5sum zlib-1.2.8.tar.gz
$ tar xvfz zlib-1.2.8.tar.gz
$ cd zlib-1.2.8
$ ./configure --prefix=$HOME/bin
$ make
$ make install
* 練習(しなくてもよい) [#te2e86e9]
** 練習1 [#fbdc80b6]
ivy.eit.hirosaki-u.ac.jpにログインして、"最初に一度だけ...
次に、適当なディレクトリで、
$ git clone git://git.kernel.org/pub/scm/git/git.git #作...
$ cd git
$ git remote -v
$ git branch -vv
$ git status
$ git log --oneline --decorate --graph --all
一画面下にスクロール SPC
一画面上にスクロール w
一行上にスクロール j
一行下にスクロール k
下に検索 / ⇒ origin/masterという文字列...
上に検索 ?
次のもの検索 n
一番下を表示 ESC >
一番上を表示 ESC <
終了 q
$ DISPLAY=hogehoge:0 gitk --all # ssh -Yでログインし...
$ DISPLAY=hogehoge:0 gitk # hogehogeはウィンド...
$ DISPLAY=hogehoge:0 gitk --all &
$ git log --oneline --decorate --graph --all | tail
$ git checkout -b mytest e83c51633
$ git help checkout
$ git status
$ git log --oneline --decorate --graph --all | tail
$ make #失敗するので、
Makefileの
LIBS= -lssl
を
LIBS= -lssl -lcrypto -lz
に変更して、再度makeする
$
$ git status
$ git add -u
$ git status
$ git commit -m "modify Makefile"
$ git status
$ git branch -vv
$ git log --oneline --decorate --graph --all | head ; ...
git log --oneline --decorate --graph --all | tail
また、gitkのメニューから更新を選んで、ログを確認して、終...
** 練習2(1のつづき) [#g3a27d3c]
$ mkdir ../hoge; cd../hoge #適当なディレクトリを作り、...
$ cp../git/{*.[ch],Makefile,README} .
$ ls
Makefile cache.h commit-tree.c read-cache.c show-d...
README cat-file.c init-db.c read-tree.c update...
$ git init
$ git add *.[ch] Makefile README
$ git status
$ git commit -m "the first commit"
$ git log --oneline --decorate --graph --all
$ git remote -v ; git branch-vv
たとえば、emacsでMakefileをオリジナルのもの(LIBS= -lssl...
$ git diff
$ git add Makefile
$ git commit -m "make Makefile the original"
$ git log --oneline --decorate --graph --all
$ git checkout -b testb
$ git branch -vv
emacsで MakefileのLIBSを -lssl -lcrypto -lz にする。
$ git add Makefile
$ git commit -m "modify Makefile"
$ git log --oneline --decorate --graph --all
$ git branch -vv
$ git checkout master
$ git branch -vv
emacsで MakefileのLIBSを -lssl -lcrypto にする。
$ git add Makefile
$ git commit -m "modify Makefile, again"
$ git log --oneline --decorate --graph --all
** 遊び(練習1のつづき) [#r1016c37]
cd ../gitなどで、練習1のディレクトリに移動する。
最初のgitを動かしてみる。そのままでは実行時にエラーにな...
read-cache.cの228行目付近のif文をコメントアウトして、mak...
- if (size > sizeof(structcache_header))
+// if (size > sizeof(structcache_header))
map = mmap(NULL, size,PROT_READ,...
$ ./init-db # .dircacheディレクトリが作成される(.git相...
$ ./update-cache *.[ch] Makefile README #update-cacheが...
$ ./write-tree #write-tree,com...
6ca44177a19e6ca8f2f761b7415a4360d2db6b8e
$ ./commit-tree 6ca44177a19e6ca8f2f761b7415a4360d2db6b8e...
the first commit
eof
Committing initial tree 6ca44177a19e6ca8f2f761b7415a4360...
bab38708b02450867071a94a9fce18123597835d
$ cat `./cat-file bab38708b02450867071a94a9fce1812359783...
tree6ca44177a19e6ca8f2f761b7415a4360d2db6b8e
author okazaki,isao,,<okazaki@ivy> Fri Jun 23 14:41:39 2...
committer okazaki,isao,,<okazaki@ivy> Fri Jun 23 14:41:3...
the first commit
$ ./read-tree 6ca44177a19e6ca8f2f761b7415a4360d2db6b8e #...
100664 Makefile(dfa152bcc0e5f29d5a2db9a482d7e65660a6fe61)
100664 README (665025b11ce8fb16fadb7daebf77cb54a2ae39a1)
100664 cache.h(9e1bee21e17c134a2fb008db62679048fc819528)
100664 cat-file.c(fd690acc02ef9c06d7c4c3541f69b10ca4b4f8...
100664 commit-tree.c(a4a8c3d9ef0c4cc6c82b96b5d1a91ac6d3b...
100664 init-db.c(0eaa053919e0cc400ab9bc40d9272360117e6978)
100664 read-cache.c(4d3c01ab27d6745be53d5caf862e5ce4d939...
100664 read-tree.c(ec0f167a6a505659e5af6911c97f465506534...
100664 show-diff.c(00a29c403e751c2a2a61eb24fa2249c8956d1...
100664 update-cache.c(aff074c63ac827801a7d02ff9278136595...
100664 write-tree.c(7abeeba116b2b251c12ae32c7b38cb048199...
$ ./show-diff
Makefile: ok
README: ok
cache.h: ok
cat-file.c: ok
commit-tree.c: ok
init-db.c: ok
read-cache.c: ok
read-tree.c: ok
show-diff.c: ok
update-cache.c: ok
write-tree.c: ok
次に、emacsでread-cache.cの228行目付近にfprintfを追加(...
$ ./show-diff
Makefile: ok
README: ok
cache.h: ok
cat-file.c: ok
commit-tree.c: ok
init-db.c: ok
read-cache.c: 4d3c01ab27d6745be53d5caf862e5ce4d939961c
--- - 2017-06-23 14:54:17.547672847 +0900
+++ read-cache.c 2017-06-23 14:53:00.644494732 +0...
@@ -228,6 +228,8 @@
map = NULL;
size = st.st_size;
errno = EINVAL;
+fprintf( stderr, "size= %d\n", size );
+fprintf( stderr,"sizeof = %d\n", sizeof(struct cache_he...
// if (size > sizeof(struct cache_header))
map = mmap(NULL, size,PROT_READ,...
}
read-tree.c: ok
show-diff.c: ok
update-cache.c: ok
write-tree.c: ok
$ ./update-cacheread-cache.c
$ ./write-tree
792883deac0a678d1975ddb4acce30ed15010149
$ ./commit-tree 792883deac0a678d1975ddb4acce30ed15010149 \
-p bab38708b02450867071a94a9fce18123597835d...
add fprintf
eof
8af70d35558e4226155fdad489654a0ece5ee196
$ cat `./cat-file 8af70d35558e4226155fdad489654a0ece5ee1...
tree 792883deac0a678d1975ddb4acce30ed15010149
parent bab38708b02450867071a94a9fce18123597835d
author okazaki,isao,,<okazaki@ivy> Fri Jun 23 15:14:12 2...
committer okazaki,isao,,<okazaki@ivy> Fri Jun 23 15:14:1...
add fprintf
最初のコミットのツリー(6ca44177a19e6ca8f2f761b7415a4360...
read-cache.c(4d3c01ab27d6745be53d5caf862e5ce4d939961c)...
とってみる。
$ ./cat-file 4d3c01ab27d6745be53d5caf862e5ce4d939961c
temp_git_file_nV0xt4: blob
$ diff temp_git_file_nV0xt4read-cache.c
230a231,232
> fprintf( stderr,"size = %d\n", size );
> fprintf( stderr,"sizeof = %d\n", sizeof(struct cache_h...
使い方は次を参考にすると良い。
"git(1)の最初のコミットをビルドして使ってみた"http://qi...
"Gitの最初の姿"http://daretoku-unix.blogspot.jp/2015/03...
"初期のGitコマンドのソースコード"http://tanakahx.github...
ページ名: