Git 15©2ch.net

■ このスレッドは過去ログ倉庫に格納されています
2017/02/05(日) 05:22:15.65ID:AxwpDksc0
ソースコード管理を行う分散型バージョン管理システム、Gitについて語ろう。

Git - Fast Version Control System
http://git-scm.com/

◆関連サイト
Pro Git - Table of Contents
http://git-scm.com/book/ja
Git入門
http://www8.atwiki.jp/git_jp/

◆前スレ
Git 13
http://echo.2ch.net/test/read.cgi/tech/1439563364/
Git 14
http://echo.2ch.net/test/read.cgi/tech/1457412803/
VIPQ2_EXTDAT: default:vvv:1000:512:----: EXT was configured
2017/02/08(水) 11:38:22.96ID:AT2+3Uwc0
>>8
なるほどと思ったが
cherry-pickは操作後の動作が保証できない
mergeなら操作後の動作が保証できる。完全ではないがcherry-pickよりまし
なのでmergeのほうが優れている
2017/02/08(水) 15:36:17.78ID:fGXhImwi0
>>10
masterブランチにcommitしまくるからそうなる
最初に開発ブランチ作れ
2017/02/08(水) 17:10:20.00ID:glAhqeU30
>>12
あっ、そういうのはいいんで、rebaseを含めブランチの履歴を整理する分かりやすいワークフローがあったら教えて下さい
2017/02/08(水) 19:40:31.54ID:Z548kjM+0
最強の整理整頓術はそもそもモノを増やさないことだってのは全く間違ってないと思う
ブランチ整理って何がしたいのか分からんけど、successful git branching modelでも参考にしたらええんちゃうの
2017/02/08(水) 22:22:54.22ID:EqksEKaR0
>>11
> cherry-pickは操作後の動作が保証できない

何を言ってるんだ?
cherry-pickはあるコミットを持ってくるというだけの機能で
cherry-pickしたあとの動作なんて最初から何も保証してないんだが

保証できないんじゃなくて、保証してない
だからrebaseして、そのcherry-pickしたコミットが正しく動くようにするんだよ

ちなみに、そもそもなんでcherry-pickして動かなくなるのかといえば
こまめなrebaseをしてないから。例えばコミットに対する修正を別コミットに
していたりするとそうなる。こまめにrebaseして意味のある単位にコミットを
修正していれば他人が読んだときのレビューも楽になるし、再利用もしやすくなる


> mergeなら操作後の動作が保証できる

mergeはブランチ全てをマージするものであってそもそも使うべきところが違う。
ブランチの中の1コミットだけを抜き取りたいときにmergeではできない
(できないからmergeの方が劣ってるとでも?w)

使い方が違うだけの話でどちらかが優れているとか劣っているとかいう話じゃない
2017/02/08(水) 22:48:05.72ID:EqksEKaR0
>>13
> あっ、そういうのはいいんで、rebaseを含めブランチの履歴を整理する分かりやすいワークフローがあったら教えて下さい

簡単に言えば、こまめなコミット、こまめなrebaseだよ
有名なオープンソースソフト(例git)のコミットログを眺めてみればいい
あれが目標とすべきコミット

眺めてみればいいといったが、コミットログっていうのは読むものなんだよ。
後から読むこともあるしレビューのときに読むこともある。だから可読性が必要

じゃあコミットの可読性はどうやればあげられるかというと
意味がある単位で小さくまとまめること

例えば試行錯誤した形跡を表しているようなコミットを持ってこられたって
ここバグってる?すぐあとのコミットで修正されてるやーんとなって時間を無駄に費やするだけ
かと言って複数のコミットを全部まとめてしまったら量が多くなりすぎる

では意味がある単位で小さくまとめる(=ワークフロー)にはどうするかとうと
まず開発中は小さくコミットしていく。大きな単位でコミットしてしまうと後で分けるのが大変になるから。
そして開発中はこまめにrebaseする。他の人にとって知りたいのは結果であって過程じゃない。
プルリク出すときには、最初から間違いなく作業しましたよっていう状態にして置かなければいけない。

rebaseが下手な人はコミットも大きくなって、いろんな修正を混ぜてしまう。
そういうことをするからrebaseするとコンフリクトまで起きてしまう。
コミットを小さくしていれば驚くほど簡単にrebaseができてしまう。
だからこまめなrebaseも苦にならない
2017/02/08(水) 23:13:58.04ID:I20sKjnm0
最初から意味がある単位で小さくまとめるのが理想だけど、
後からブランチの履歴を整理する手段も色々ある。

gitでアレを元に戻す108の方法
http://labs.timedia.co.jp/2011/08/git-undo-999.html
Gitでやらかした時に使える19個の奥義
http://qiita.com/muran001/items/dea2bbbaea1260098051
18デフォルトの名無しさん (アウアウカー)
垢版 |
2017/02/09(木) 08:27:12.93ID:ClsEJCvia
git(hub)-flow
19デフォルトの名無しさん (エーイモ)
垢版 |
2017/02/13(月) 10:17:21.25ID:Ql0/GOXFE
git mvしないでmvしちゃったんですけどgit addしたらrename扱いになってました
絶対にgit mvしなくてもgit画面どう見てくれるから問題ないってことですか?
2017/02/13(月) 10:39:40.22ID:1h+Oz1MN0
>>19
中身を書き換える前ならわりと追ってくれる
どこまで追ってくれるか試すと楽しいぞ
21デフォルトの名無しさん (ワッチョイ)
垢版 |
2017/02/13(月) 15:13:09.61ID:UyeCKZqE0
改行コード変わるだけで別ファイルになるけどな
2017/02/17(金) 09:56:23.44ID:hEtwtvyY0
毎日仕事が終わったら、その日作ったソースコードを
gitサーバーにコミットして帰宅する俺。
2017/02/18(土) 01:13:13.92ID:neEeF1u6M
コミットして帰ると次の日休んだ時にビルドが通らないと呼び出し喰らうパターンだな
2017/02/18(土) 01:21:39.27ID:YzcxuYMW0
>>22
プッシュじゃなくて?
2017/02/18(土) 01:58:54.36ID:SqGT/vv90
>>24
ごめん、プッシュね。

マネジャーの人が俺らの作業をチェックしたいらしくて、
毎日帰るときにみんなプッシュしてから帰宅する。
svn時代と変わらない。
2017/02/18(土) 02:04:19.48ID:odevQhO/p
細かくコミットしていくことを心掛けたいが、気付くとコミットを忘れて突っ走ってしまう
そんな馬鹿野郎におすすめのツールとか運用とかないですか
2017/02/18(土) 03:06:20.95ID:3dbLYC4l0
>>26
突っ走った後にgit add -p 使って複数のコミットを作る
2017/02/18(土) 11:33:38.07ID:YCJMYP7V0
>>26
一定時間ごとに自動でコミット、プッシュするスクリプトがあったと思う
2017/02/18(土) 13:22:21.19ID:y2nzrwVZ0
>>28
そんなことするぐらいなら、
一定時間ごとに「コミットしろよ」って通知出すほうが良いわなw
2017/02/19(日) 22:56:47.13ID:ae9YYSse0
cron 書けとしか言いようがない。
31デフォルトの名無しさん (ワッチョイ)
垢版 |
2017/02/22(水) 00:19:55.01ID:doFig/5A0
エディタに自動保存機能なけりゃ編集内容はメモリ上にしかないからどのみち死ぬ
32デフォルトの名無しさん (ワッチョイ)
垢版 |
2017/02/22(水) 15:40:38.57ID:7bpb3LbA0
>>31
数分おきにエディタに :wq! を送るスクリプトを作ろう
2017/02/22(水) 15:45:05.02ID:T1tKwjPzH
意味のある区切りじゃない自動保存などゴミ
2017/02/22(水) 16:51:00.38ID:QaRsR5LQa
そもそもコミットは成果毎に行うのであって細かくすればいいというものではない
2017/02/22(水) 19:13:30.90ID:nmnET67+0
プレーンテキストとかワープロとかならともかく、ソースコードだったらコンパイルするためにどんどん保存してるんだから自動保存ってそこまで必要性高いものでもなくない?
2017/02/22(水) 19:54:40.37ID:OuXxGo6Bp
コミットと保存の話が混ざって混沌としてきてる
2017/02/22(水) 20:45:47.20ID:bVHsZCW9a
個人開発なら単なる履歴残しに使ってもいいがチームの場合はそれじゃ困るんだよね
2017/02/23(木) 01:11:00.83ID:9wlFqT9C0
ショートカットキーctrl+Sで保存は便利でよく使う
履歴残し程度なら同様にショートカットキーで保存とコミットができるようにエディタにスクリプト組み込めばOK
初回ショートカットキーで一時作業用ブランチを切らせて
一通り終わったなら別のショートカットキーでsquashなりでまとめてからコミットメッセージ入力窓でも出してから本来の作業用ブランチにFFマージさせればおk
2017/02/23(木) 10:00:04.78ID:lHjqIPrz0
>>37
チームの場合はgitは個人で自由に使わせておいて
チーム側では集約にsvnを使うよね
40デフォルトの名無しさん (ササクッテロラ)
垢版 |
2017/02/23(木) 16:27:13.03ID:EPi8ln12p
>>39
ない

svnで運用された頭が痛くなるような履歴をgitに取り込むことはよくある
2017/02/23(木) 20:55:38.64ID:0FbQfq3Vp
チーム毎にgit使って、各チームの成果をインテグした時にsvn使う事はある
個人でgit、チームでsvnって構成はgitの美味しさの大部分を潰してるように見えるけど、想定してる規模が分からんし何とも言えんか
42デフォルトの名無しさん (ワッチョイ)
垢版 |
2017/02/24(金) 14:06:29.60ID:STsv/yLm0
SHA1の衝突がGoogleによって公開、gitにも言及
https://shattered.it/

それに対するLinusの見解
http://marc.info/?l=git&;m=148787047422954
2017/02/24(金) 14:11:42.95ID:xRGcfmimH
hashの衝突は元から想定済っしょ
そもそも5桁でちぎって管理()してるんだし
2017/02/24(金) 15:11:29.62ID:qhcGsvfzM
想定はしてないでしょ、無理矢理衝突させたらリポジトリ壊れたって書いてるし
http://stackoverflow.com/questions/9392365/how-would-git-handle-a-sha-1-collision-on-a-blob
2017/02/24(金) 16:02:16.98ID:U6j2M/4W0
>>43
5桁でちぎって管理ってなんのこと?
46デフォルトの名無しさん (ワッチョイ)
垢版 |
2017/02/25(土) 10:54:33.01ID:xirdZVsB0
v2.12.0
2017/02/25(土) 11:32:01.15ID:PfZ6yy2F0
>>46
何か面白い機能追加された?
2017/02/27(月) 04:28:34.00ID:RD4dbD8r0
Linusの公式コメント
https://plus.google.com/+LinusTorvalds/posts/7tp2gYWQugL
2017/02/27(月) 13:29:26.47ID:v76+Cgkq0
SHA1衝突なんか怖かねーぜバーカ!
ってこと?
50デフォルトの名無しさん (ワッチョイ)
垢版 |
2017/03/01(水) 00:08:39.88ID:MSk4m/Wm0
ファイル数が20万〜30万個あるプロジェクトをgitで管理できる?
git statusすると20万〜30万の全部のファイルの更新日チェックするの?
2017/03/01(水) 01:39:05.95ID:B+RUxrlO0
gitで管理できなかったら、他の何を使っても出来ないと思うw
管理せずにファイル置いとくだけならできるだろうけど
2017/03/01(水) 05:02:00.38ID:TmPMZG9k0
>>51
きも
53デフォルトの名無しさん (オッペケ)
垢版 |
2017/03/01(水) 12:18:24.07ID:riQaWnbAr
俺も思った
2017/03/01(水) 12:52:10.72ID:D9Ze9lwZa
>>50
それくらいなら全然大丈夫だよー
2017/03/02(木) 19:24:50.56ID:ZV5SMkF2H
>>50
人間よりは速い
2017/03/02(木) 23:03:10.15ID:sITpgG7dd
gitを使うのが目的になってる奴がいるな
2017/03/02(木) 23:06:07.56ID:qpimcWgg0
gitを使うのが目的じゃないけど結果的にgitを使ってるな
2017/03/02(木) 23:30:35.54ID:GmcRpo7M0
gitを使ってるカッコいい俺
2017/03/02(木) 23:31:43.91ID:em5mjT5q0
普通じゃ?
2017/03/02(木) 23:36:40.95ID:XOZN9kk90
gitの使い方を覚えられないおっさんも世の中には居るんだ
2017/03/02(木) 23:42:40.19ID:qpimcWgg0
使える人が使わないなら、それはいいんだよ。

能力不足で使えない(=無能すぎる)
会社のしがらみで使えない(=かわいそう)

あと使って見てないやつもダメだな
2017/03/03(金) 11:58:15.68ID:SmLECISdd
Gitが使えない外注イラネ
63デフォルトの名無しさん (JP)
垢版 |
2017/03/03(金) 12:30:04.87ID:IUFykjWpH
篩に使うのはありか
2017/03/03(金) 21:00:59.00ID:n9rn4mK30
なんでもいいから自分のソースくらい自分でコミットしろ。
2017/03/03(金) 21:35:27.51ID:EvAeH8F3d
本当になんでもいいの?
2017/03/03(金) 23:39:23.71ID:q5L7Z+jKM
masterにコミットしていいの?
2017/03/04(土) 00:19:50.00ID:2pwhOacNp
結果にコミットしていいの?
68デフォルトの名無しさん (ワッチョイ)
垢版 |
2017/03/04(土) 00:59:09.29ID:kf4torcY0
面倒臭いのでだいたい
git add .
git commit --amend -m "hoge"

で済ましてる
一通り終わったらgit commit --amendでコミットメッセージちゃんと書く
squashしなくてよい方法だよ
2017/03/04(土) 03:38:59.15ID:X3LbZrz10
Git - 高度なマージ手法
https://git-scm.com/book/ja/v2/Git-%E3%81%AE%E3%81%95%E3%81%BE%E3%81%96%E3%81%BE%E3%81%AA%E3%83%84%E3%83%BC%E3%83%AB-%E9%AB%98%E5%BA%A6%E3%81%AA%E3%83%9E%E3%83%BC%E3%82%B8%E6%89%8B%E6%B3%95


これいいね
2017/03/04(土) 11:03:44.63ID:fiOXClU60
git merge --abort
git rebase --abort

これいいよな。

svnとかだとやらかしてしまって中途半端な状態になって
これどうすりゃいいんだよってなってしまうけど、
gitだとたいてい--abortすればリセットできる
71デフォルトの名無しさん (ワッチョイ)
垢版 |
2017/03/04(土) 14:23:44.15ID:GRvQ2lmz0
AにコミットしてA'
A'にコミットしてA''
になってるとき
A'をBに名前変えて
A->A''と
A->Bに分けることはできますか?
2017/03/04(土) 15:02:21.59ID:fiOXClU60
git checkout 好きなコミットID

ブランチ名なんて最新のコミットに名前つけてるだけであって
コミットIDで全て参照できる
73デフォルトの名無しさん (ワッチョイ)
垢版 |
2017/03/04(土) 17:15:35.10ID:GRvQ2lmz0
A->A''の方にはB(A')が無かったことにしたいのですが
2017/03/04(土) 17:34:49.80ID:NAI/204b0
説明がわかりにくすぎだろw
pushしてればrevertで
してなければrebase -iで
2017/03/04(土) 21:55:14.48ID:X3LbZrz10
cherrypickでA''からAにパッチ当てりゃいいだけじゃね?
76デフォルトの名無しさん (スプッッ)
垢版 |
2017/03/04(土) 22:05:36.70ID:TK9n5Zigd
>>71
git branch B A'
をする
git rebase A -i
でA'の行を消す
2017/03/06(月) 23:20:15.96ID:8UuxKa0s0
ディレクトリやファイルをマージするだけの作業だが、あまりに大量&1日あたりの作業時間があまり取れないため、1ヶ月ぐらいかかる見込み

こう言う場合って作業完了してからまとめてコミットすべき?
それともキリのいいところでコミットすべき?
2017/03/06(月) 23:34:33.58ID:hCzUBa9v0
適当にコミットしていって後で纏めたくなったらrebase -iすればいいんじゃね
2017/03/07(火) 15:02:30.70ID:+1wYVpxF0
rebaseは甘え。 使ってはいけない。
2017/03/07(火) 18:29:12.37ID:JtxH0L4+M
せっかくローカルにあるんだし、どんどんコミットしたら?
2017/03/07(火) 19:25:45.74ID:deKTD69U0
rebase使っても実は隠しコマンドのrerebase使えばまた元に戻るから大丈夫
2017/03/07(火) 20:49:12.26ID:buHXdcTx0
rerebaseだと!?
2017/03/07(火) 20:55:44.46ID:FdtwfqDL0
rebase怖いならブランチ切るなりタグつけるなりしてからrebaseすりゃいいじゃん
rebaseしたってコミットそのものが世界からすぐに消えるわけじゃないんだし
84デフォルトの名無しさん (エーイモ)
垢版 |
2017/03/07(火) 22:48:44.65ID:6dT6PmkfE
git cloneで特定のタグから最新のコミットまでの範囲を取得する方法を教えてください
2017/03/08(水) 00:28:53.24ID:bFUfM0140
> rebase怖いならブランチ切るなりタグつけるなりして

そのブランチやタグを作るのが面倒なバージョン管理ツールがありまして、
そのせいでブランチやタグを切るのが嫌なんですよ。
2017/03/08(水) 01:12:08.47ID:+/47+kY70
知らんがな
2017/03/08(水) 08:51:03.76ID:dlE+7VUyM
ローカルだけブランチ作ればいいだろ。他のツールはスレ違い。
88デフォルトの名無しさん (エーイモ)
垢版 |
2017/03/08(水) 18:56:28.23ID:tzSf6NwiE
(1)git checkout -b hoge コミットID1 でhogeブランチを作る
(2)masterブランチに戻る
(3)git branch -D hoge でhogeブランチを削除する
(4)git checkout -b hoge コミットID2 で異なるコミットのhogeブランチを作る

hogeブランチでは何かを編集したりするわけではないので
hogeブランチにいたまま別のコミットIDでhogeブランチを上書き?する方法ありませんか?
masterブランチに戻ってからhogeブランチを作りなおして新たに作るのが面倒くさいので
2017/03/08(水) 19:57:59.67ID:AFnyce7m0
git reset --hard コミットID2
90デフォルトの名無しさん (ワッチョイ)
垢版 |
2017/03/09(木) 06:48:45.74ID:fQxPjt/z0
>>88
コミットIDでcheckoutすりゃいいだけじゃね

(1)git checkout コミットID1
(2)git checkout コミットID2
91デフォルトの名無しさん (スプッッ)
垢版 |
2017/03/09(木) 08:26:50.81ID:TQt2xuGKd
>>88
git reset --hardは、ブランチの付け先を簡単に操作できてしまうから、使う前にreflogの見方を覚えておくこと
2017/03/09(木) 08:37:37.52ID:K/l9Si6sM
>>82
リ・リ・リベース
アホデミー賞を総なめ
93デフォルトの名無しさん (エーイモ)
垢版 |
2017/03/09(木) 10:28:24.13ID:xGhx3aNSE
resetは困ります。。。。
checkoutでどうにかやる方法はないということでしょうか?
9488=93 (エーイモ)
垢版 |
2017/03/09(木) 10:29:17.80ID:xGhx3aNSE
ブランチは1個しか作りたくないんです
95デフォルトの名無しさん (スプッッ)
垢版 |
2017/03/09(木) 12:31:57.97ID:TQt2xuGKd
>>93
じゃあ>>90で良いんじゃないの?
コミットは出来ないけど
2017/03/09(木) 13:13:36.94ID:x6aOWZGA0
>>88
git checkout hoge
git merge <commit>
2017/03/09(木) 13:42:24.50ID:quKxBXU+0
>>93
なんでreset困るの?ブランチ消してる時点で同じことだと思うけど
resetしたってコミットが消えるわけじゃないよ
9888=93 (エーイモ)
垢版 |
2017/03/09(木) 22:57:50.27ID:DwjAxR0kE
git checkout -b hoge
git reset --hard コミットid1
git reset --hard HEAD@{1}
masterブランチには何の影響もないですね
最新のコミットに戻るときにreflogで位置を確認するのが面倒くさそうです
これも覚えておきます

>>96
mergeだと古いコミットに戻ろうとした時にAlready up-to-date.って表示されてしまいました
2017/03/09(木) 23:15:12.39ID:x6aOWZGA0
hogeにはすでにコミット1やコミット2が含まれてる場合もあって
その場合はそれ以降のコミットを捨てた状態にしたいってことなの!?
用途が謎
2017/03/10(金) 03:45:25.28ID:V4zus/a90
>>98
ブランチは1個しか作りたくない理由がわからないから、それだったらID1とID2に別のブランチを付けたら良いんじゃない?って思っちゃうんだけど
何で作りたくないんですか?
2017/03/10(金) 04:41:26.50ID:hkfiatAK0
>>90のやり方がスルーされるからやりたいことと違うんだろうなあ
2017/03/10(金) 14:48:19.74ID:y8xCqliG0
タグの代わりなんじゃ?
2017/03/10(金) 21:15:08.71ID:mGr7V+b80
みんなってさ、ステージングしているファイルから行単位とかでコミットしたり
する機能使ってる?

俺はファイル単位でしかコミットとかしないんだけどさ、そもそもステージング
してるところから行単位でまた編集するようなもんだから、テスト通るかわからなく
なるわけだし、あんまり積極的に使うもんじゃないよね。

あとdiffの結果画面の見方が今ひとつ苦手w
2017/03/10(金) 21:48:11.92ID:cBCq3F3F0
>>103
使わんなー
2017/03/10(金) 21:51:35.65ID:V4zus/a90
>>103
細かいけど、行単位でステージングする機能、じゃなくて、ステージングした段階から行単位でコミットする機能ってある?
2017/03/10(金) 22:13:50.48ID:y8xCqliG0
git add -p のこと?
ならすげー使うけど
2017/03/10(金) 22:28:17.98ID:gboOrvO30
git add -pの存在がsvnからの移行を決定づけた
2017/03/10(金) 22:51:42.82ID:mJMnK6Gx0
俺もよく使うな。

gitの便利さっていうのは現実的な問題を解決してることにあると思っていて、
理想は最初に計画を立てて間違えることなく作業をすることだけど
現実にはいろんな細かい修正を忘れたり分けるべき修正を一緒にやってしまったりするでしょ?

そういう時に俺は、いま修正している中で、特定の部分だけgit add -pつかって
一つのコミットにして、あとの分は別コミットにして、
テストは後から書いてrebaseしてまとめるとかやるよ。

他の人が理解・レビューしやすい並びのコミットと、
実際の開発順っていうのは必ずしも一致しないからさ
2017/03/10(金) 23:30:38.30ID:V4zus/a90
git add -pなら使う。行単位でステージングする機能、だよね?
2017/03/11(土) 06:24:50.89ID:d5jme4tX0
>>108
SVN 使いだけどこの機能とローカルコミットはマジで欲しい
2017/03/11(土) 10:36:14.71ID:JsoExgwjH
>>110
gitに乗り換えても良いんですよ?
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況