トップページtech
1001コメント314KB

Git 2

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2010/09/14(火) 21:38:18
ソースコード管理を行う分散型バージョン管理システム、Gitについて語ろう。

◆前スレ
git スレッド
http://hibari.2ch.net/test/read.cgi/linux/1197798039/

◆関連サイト
Git入門
http://www8.atwiki.jp/git_jp/
0083デフォルトの名無しさん2010/09/28(火) 01:27:04
>>81,82
返答ありがとうございます。

>>81
基本的に、各ユーザは自分の作りたいものに対するプログラムを書く予定です。
なので、本来は別々のリポジトリに分けた方がよいのかと思うのですが、

  ・ユーザが増えるたびにいちいちリポジトリを作るのが面倒
  ・利用者が自分でリポジトリ作るというのも避けたい(権限的な問題)

と考えてます。
なので、一つ全体的なリモートリポジトリを作っておき、その下にあるユーザ毎の
ディレクトリに対してローカルリポジトリをコミットできれば良いかと思いました。

そもそもめんどくさがるなという話なんですかね、これは。


>>82
Bazaarはディレクトリごとに管理してるんですね。
こっちならこのようにできそうな気が・・・。
少し調べてみます。
0084デフォルトの名無しさん2010/09/28(火) 01:29:36
>>77 >>78
日本人と言っても在米15年以上の在米邦人だ。
現在はGoogle社員。
0085デフォルトの名無しさん2010/09/28(火) 02:27:47
>>83
Gitosisみたいなのでホスティングすればそういうのできるよ。

>>84
どっかのプロフィールではTwin Sun所属ってことになってたと思うんだけど、
ヘッドハントされたのかな。
0086デフォルトの名無しさん2010/09/28(火) 04:50:46
git svn でcloneしてくるときに、通常は --stdlayout, -sで持ってくると思いますが、
これはsvnのブランチがtrunk,tags,branchesを想定したものだと思います。

ところが、Subversionの自由にブランチをディレクトリに割り当てられるためか、
branches/hoge や branches/foobar のようなブラン構成ではなく、
branches/fuck/hoge や branches/fuck/foobar、branches/sine/piyo や branches/sine/piyopiyo
という2段構成のブランチになってしました。

これを --stdlayoutで引っ張ってくると、もってきたgitリポジトリの履歴がかなりメチャクチャになってしまうのですが、
上手く持ってくるような方法はないでしょうか?



0087デフォルトの名無しさん2010/09/28(火) 04:55:24
>>83
>>85 じゃないけど、github使う(privateや容量増は有料だけど)のもいいね
githubはユーザーごとに簡単にリモートリポジトリもてて
管理用のユーザーかリポジトリ作っておけば、そっちにも成果をマージできるでしょ

あとは、どこかのサーバーに中央リポジトリ用意して、
各個人ごとにリモートブランチきって突っ込むとかw
0088デフォルトの名無しさん2010/09/29(水) 01:53:46
タグ一覧するコマンドって無いのかな?
0089デフォルトの名無しさん2010/09/29(水) 02:38:58
>>88
git tag
0090デフォルトの名無しさん2010/09/29(水) 12:16:25
gitはSSHと組合せて使っている人が多いと思いますが
SSHの秘密鍵生成には確率的素数判定法を使っているはず:-)
0091デフォルトの名無しさん2010/09/30(木) 13:27:41
v1.7.3.1きた。stash が壊れてたらしい。
0092デフォルトの名無しさん2010/10/02(土) 18:29:39
告白というか、一緒に下校してほしい、みたいな感じ。
お互い徒歩通学で家まで1時間ぐらいかかるんだわ。
昨日からその子のことを下心でしか見てない自分が悲しい
0093デフォルトの名無しさん2010/10/02(土) 18:30:38
これはひどい誤爆…
すいません
0094デフォルトの名無しさん2010/10/02(土) 18:45:04
甘酸っぱいのうw甘酸っぱいのうww
0095デフォルトの名無しさん2010/10/02(土) 18:52:07
gitのスレタイで来たのなら、高度な誤爆
0096デフォルトの名無しさん2010/10/02(土) 19:07:47
>>93
絶対に許さない
0097デフォルトの名無しさん2010/10/02(土) 20:14:11
gitってあほ、ぼけ、間抜けって言う意味なんだねw
0098デフォルトの名無しさん2010/10/02(土) 21:16:07
なんだ俺のことか
0099デフォルトの名無しさん2010/10/02(土) 22:06:47
お前は間抜けなんかじゃないよ。自信を持とう。
0100デフォルトの名無しさん2010/10/02(土) 22:13:07
そうだ、お前は間抜けでも歯抜けでも毛抜けでもない!
0101デフォルトの名無しさん2010/10/03(日) 13:49:29
欝だ死のう
0102デフォルトの名無しさん2010/10/07(木) 14:21:35
話の流れをブッタギル様ですまん。

git 運用において、パッチはあくまでも機能単位であるべきなのだろうか?
たとえば "100ファイルに相互依存しない同様の変更を施したモノ"は
パッチ100本にすべきなのか、パッチ1本にすべきなのか迷う。

つかまとめあげたパッチを強制的にファイル単位にバラす方法知らん?
0103デフォルトの名無しさん2010/10/07(木) 20:08:27
git commit -m '#!/usr/bin/hogeを#!/usr/local/bin/hogeに変更' とか?
同様の変更ってことはある単一の意図でやったことだろうから
100個に分割するんじゃなく1個にまとめるべきなんでは
0104デフォルトの名無しさん2010/10/07(木) 21:46:08
運用次第だと思うが、git推奨はどんなのだろう

俺の場合、コミットログがバラバラになる場合はコミットはまとめないけど、
それでもまとめない場合はブランチ名つけておけばいいんちゃうのかな
0105デフォルトの名無しさん2010/10/07(木) 21:58:37
>>102
例えばそれが「インデントまとめて変更」とかだったら100ファイル一発でも
良いと思うが、100個のバグ修正だったら絶対に分けるべきだと思う。

俺の考えでは、誰かが分離したくなるかもしれない単位、で
世に出すのが良いのではないかと思う。
01061022010/10/08(金) 09:03:57
そゆ意味じゃ、テストスクリプト群への同様の修正なので、
100個のバグ修正ともいえるな。
0107デフォルトの名無しさん2010/10/08(金) 11:54:56
そもそもなんで同じ内容のものを100箇所に鏤めて置くんだ?
普通共通のファイルを一個作ってincludeなりなんなりするだろ
0108デフォルトの名無しさん2010/10/08(金) 13:05:29
テストプログラムに対するレビューは果たして必要か
0109デフォルトの名無しさん2010/10/08(金) 13:31:46
>>108
スレ違い
0110デフォルトの名無しさん2010/10/08(金) 14:01:22
わかった、じゃあスレ違いじゃない書き方にする。

>>109
他人のテストスクリプトに対してそういうケチを付ける気にはならないな、自分は。
0111デフォルトの名無しさん2010/10/08(金) 14:02:25
っぷっ
0112デフォルトの名無しさん2010/10/10(日) 17:17:16
rebaseしたら今いるブランチの最後のコミットだけ無くなった
どういう事なの・・・
0113デフォルトの名無しさん2010/10/10(日) 17:22:58
はぁ・・・復元する方法ないのかな・・・
0114デフォルトの名無しさん2010/10/10(日) 17:44:51
reflogすれば見つからないか?
0115デフォルトの名無しさん2010/10/10(日) 18:57:14
>>114
!!あった!!
ありがとう!
0116デフォルトの名無しさん2010/10/10(日) 22:39:25
>>112
ふつーは reflog でちまちま探すなんだけど、rebase する前にあらかじめ
git checkout -b b4rebase rebased みたいにくさびブランチを打っておくとよいぞ。

つか rebase がもっと柔軟にならんかね。って欲張りな悩みよね。
0117デフォルトの名無しさん2010/10/10(日) 22:41:39
カキコついでに質問だが、カスケードしたブランチを一発で rebase するいい方法、ない?

master->foo-bar->baz->qux みたいなブランチを、一気に直線 rebase するような感じの。
0118デフォルトの名無しさん2010/10/10(日) 22:50:43
>>116
rebase -i はけっこう柔軟だと思う。

>>117
普通に git rebase master qux じゃダメなん?
0119デフォルトの名無しさん2010/10/11(月) 12:15:53
>>118
git checkout foo; git rebase master
git checkout bar; git rebase foo
git checkout baz; git rebase bar
git checkout qux; git rebase baz
と同じ結果にならないよね?
各ブランチがレビュー待ちのパッチを含んでいると想像してくれ。
0120デフォルトの名無しさん2010/10/11(月) 16:12:03
言い忘れ。かつ、各ブランチがそれぞれのマイルストーンを達成している。
0121デフォルトの名無しさん2010/10/11(月) 16:32:54
>>119
それをコマンド一発でやりたいってこと?
branch.name.mergeを元にして動くスクリプトを書いても良いと思うけど、
mergeと違って、元がrebaseしてる場合はコンフリクトする可能性大だから、
複数ブランチを一気にrebaseかけるのは怖いな。
手動でやったほうが良いんじゃないかね。

foo、bar、baz、quxはそれぞれテスト等も済んでるだろうから、
無理にrebaseするよりも、masterからfooにmergeしたほうが良いと思うな。
各ブランチがmasterの新機能を前提として必要になったのなら仕方がないけども。
濱野さんの入門Gitには、そのように書いてあった。

なかなか上流に取り込んでもらえないと、rebaseでキレイに並べて
おきたい気持ちは分かるんだけど…
0122デフォルトの名無しさん2010/10/12(火) 19:48:42
master ブランチにいるとき git merge origin で origin/master->master のマージが行われないのなんでだよ!
0123デフォルトの名無しさん2010/10/12(火) 19:56:42
>>122
git pullなら省略できる(適切に設定されてれば)
0124デフォルトの名無しさん2010/10/12(火) 20:46:28
すげー書き違え! まさにその git pull origin でカレントじゃない master の更新が行われず、
git push するたびに master について叱られるのだ。
master じゃほとんど作業しないし。

すまんこ
0125デフォルトの名無しさん2010/10/12(火) 23:54:22
自演乙
0126デフォルトの名無しさん2010/10/15(金) 10:32:34
TortoiseGitをプロキシ経由で使うのってどうやれば?
試しにSettingsでプロキシを有効にするよう設定してみましたが無理でした

Putty Fatal Error
Network error: Connection timed out
0127デフォルトの名無しさん2010/10/15(金) 16:18:44
うちでは正常に動作するよ
0128デフォルトの名無しさん2010/10/16(土) 01:11:54
PuttyってことはそれってPutty側で設定がいるんじゃ
外してるかも
0129デフォルトの名無しさん2010/10/20(水) 09:00:47
git svn で取得したリポジトリにて git describe がタグ振らずに機能するといいなあ。
0130デフォルトの名無しさん2010/10/23(土) 13:47:49
git commit -aを実行するとVimが起動します><
0131デフォルトの名無しさん2010/10/23(土) 13:49:33
git commit -aを実行するとjedが起動
します><
0132デフォルトの名無しさん2010/10/23(土) 13:54:48
git commit -aを実行するとパソコンが固まります><
0133デフォルトの名無しさん2010/10/25(月) 14:27:04
もしかして、日本語でログメッセージ書くとStashに失敗する?
TortoiseGit1.5.8.0とGit1.7.3.1で使っているけど、ときどき失敗する。
しかもGit Command Progressのダイアログでは、ログメッセージに日本語が入っていると文字化けして表示される。
0134デフォルトの名無しさん2010/10/25(月) 14:32:37
なんかgit svnで取得したリモートブランチに対して、直接mergeをかけたら
svn側でしか変更してないはずなのにコンフリクトするんだけど、
もしかしてリモートブランチはマージ履歴持ってなかったりする?

git svn fetch #リモートブランチを更新
git merge --squash --no-commit git-svn #リモートの更新をmasterにマージ
# ここでコンフリクト
0135デフォルトの名無しさん2010/10/25(月) 15:21:51
>>134
今のところSVNでgitのマージコミットを表現することはできないから、
dcommitする予定のブランチではmergeしちゃダメだよ。
まず今のブランチをgit svn rebaseでSVNに追随させないといけない、んだけど
うまくrebaseできなそう。。。
git checkout -b mergetest git-svn してcherry-pickで整形し直したほうが
良いかもしれない。
0136デフォルトの名無しさん2010/10/25(月) 23:53:01
>>135
いや、svn側の変更をgitで追いかけているだけなんで、dcommitする予定はないんだ。
手元にはsvn fetchしているだけのリモートブランチ(デフォルト名のままgit-svn)と、
ローカルの変更込みのmasterがあるだけ。

cherry-pickしたほうがいいのかなあ。ありがとう。
0137デフォルトの名無しさん2010/10/26(火) 03:20:57
no-ffつけるとかそういう話じゃなくてか
0138デフォルトの名無しさん2010/10/26(火) 04:48:40
no-ffはsvnブランチ間のマージの話だったように思うけど……今度試してみる
0139デフォルトの名無しさん2010/10/26(火) 07:04:26
>>136
>>134をよく見たら --squash してるけど、前回もそうしてた?
それならコンフリクトするのも分かるよ。
squashで別のコミットとして作り直してるから、次にマージする時には
また同じコミットが対象になってしまう。コンテンツの内容が近いなら
うまい具合にマージ出来るかもしれないが、失敗する可能性も高い。
これはgit-svnに限らないgitの話。
git log master..git-svn で見ると既にマージ済みのが出てくるんじゃないかな。
0140デフォルトの名無しさん2010/10/26(火) 07:38:43
>>139
確かにgit log master..git-svnしたらsvn側の履歴が全部出てきた……。
svn側の複数の変更を、masterではひとつにまとめたかったんだけどなあ。
やってることはリモートブランチがsvnなだけでhttp://progit.org/book/ja/ch6-7.htmlと変わらないと思ってたんだけどなあ。
0141デフォルトの名無しさん2010/10/26(火) 08:02:41
前回merge --squashしたところからの三点マージができればいいんだけど、
そもそもgitで三点マージを行うのがrebaseか……。

どうせsvn側でしか変更はないんだから-Xtheirsでも付けるかな……。
0142デフォルトの名無しさん2010/10/26(火) 20:44:21
>>140
>やってることはリモートブランチがsvnなだけでhttp://progit.org/book/ja/ch6-7.htmlと変わらないと思ってたんだけどなあ。
その例はsubtreeマージで1方向なので、2ツリーマージでもうまくいくんだと思う。

>>141
>どうせsvn側でしか変更はないんだから-Xtheirsでも付けるかな……。
一方的なコピーでいいのかな。それなら merge -s subtree でもいけそう。

>そもそもgitで三点マージを行うのがrebaseか……。
rebaseも普通のmergeも、共通の祖先が見つからない(2ツリーマージ)場合は
ファイル単位でぶつかると手動マージになる可能性が高いね。

>前回merge --squashしたところからの三点マージができればいいんだけど、
無理矢理やるとしたら…
git read-tree -u -m 前回squashしたコミット HEAD git-svn
とかで3wayいけるけど、ファイル同士がぶつかるとunmergedになってしまうので
自分でどうにかするとか、git merge-index他の配管コマンドでどうにかしたりする必要あり。
0143デフォルトの名無しさん2010/10/27(水) 02:47:53
read-treeに-mなんてあったのか。次からそれでやろう。ありがとう。
0144デフォルトの名無しさん2010/11/02(火) 15:12:03
ブランチaで8個ほど一つ一つ丁寧にコミットして
git svn rebase
git checkout master
git merge --no-ff a
git svn dcommit
したら「Merge branch 'a'」というたった1つのコミットになっていた件。
なんなんだこれは…
0145デフォルトの名無しさん2010/11/02(火) 17:36:48
>>144
>>135
0146デフォルトの名無しさん2010/11/04(木) 05:36:07
リモートリポジトリに真っさらなブランチをpush --forceしてしまいました
手元には元のソースは残っていません
復旧は不可能ですか?
0147デフォルトの名無しさん2010/11/04(木) 06:20:02
>>146
まず手元のリポジトリで git reflog してみる。それで見つかるかも知れない。
手元に無くても、分散してるどこかにあるかも知れない。

最悪のケースとして、pushした先のリポジトリにしか無かったという場合、
まずその.git(bareリポジトリならそのディレクトリそのもの)をバックアップ。
git fsck --lost-found を実行すると .git/lost-found/commit が出来るので、
そこから探す。

あまりあり得ないと思うけど、空pushした後に git gc が実行されていると
ポインタだけじゃなくてオブジェクトも消えているので、もうダメぽ。
0148デフォルトの名無しさん2010/11/06(土) 01:24:46
GitExtensions使ってる人いますか?
あれ、いつの間にか日本語対応しました?
0149デフォルトの名無しさん2010/11/06(土) 13:56:34
そんなのあるのか、使ってみよ
0150デフォルトの名無しさん2010/11/06(土) 23:49:36
過去の履歴を綺麗さっぱり消したいのですが可能でしょうか?
現在のHEADを1番目のコミットにしてしまいたいのです。
単純に.gitディレクトリを削除してinitし直せばいいのかな?
0151デフォルトの名無しさん2010/11/07(日) 00:36:17
>>150
ほんとに綺麗さっぱりなら.gitを消してinitしなおすのが簡単だね。
微妙に残すのなら、git checkout --orphanというのがあるので
これを利用すればrootコミットから作れる。
0152デフォルトの名無しさん2010/11/07(日) 03:02:04
なんか、こういうことをやりたい、ってのが先にある時にやり方が分からないことが多いのは
gitの思想によるものなのか、それとも単に分散バージョン管理に慣れていないからなのか、たまに分からなくなる。
特に、分散なんだからそれぐらいできてもよさそうじゃん、ってのができないとき…。
0153デフォルトの名無しさん2010/11/07(日) 03:31:14
例えばどういうこと?

逆引き的なドキュメントが少ないという話であれば
ProGit一通りよむとかなり解決するが
http://progit.org/book/ja/
0154デフォルトの名無しさん2010/11/07(日) 03:38:18
むしろgit使ってみて今までやりにくかったことが簡単にできてびっくりしたけど
Subversion使っていてこういう機能欲しかったんだ、というのがあったり
TortoiseSVNからコマンドラインに移行したのも理由だと思うが


ただ、>>152がいうのもわからなくはなくて、〇〇はrebaseでできる、といった場合に、
何故○○というコマンドじゃないのか?と思ったり、
もちろん基本的なコマンドは用意しとくから、各個人勝手にaliasしろや、
という一貫したなげやり感もUNIX的にはわからんでもないし、
出来る事多いからコマンドかなり増えるだろうし。

Bazaarは確か標準のaliasもあるしかなりコマンドあったはず。
どっちがいいかという話だな。GUIがメインならコマンド多くても気にならないんだけどね。


0155デフォルトの名無しさん2010/11/07(日) 03:59:41
gitは、もしPro Git(の日本語訳)がなければ、少しでも難しいことは
何もできなかっただろう、という気はする
0156デフォルトの名無しさん2010/11/07(日) 04:25:12
便利そうなんだよなあ。
それはわかってるんだけど、
どうも Mercurial から移行できない。
0157デフォルトの名無しさん2010/11/07(日) 04:25:50
Mercurialってどうなの?
0158デフォルトの名無しさん2010/11/07(日) 05:02:34
Mercurial は分散で高速なんだけど凝ったことしなきゃ svn なんかとそんなに変わらない感覚で使える。
git は便利な分だけ覚えなきゃなんないことがある。ちょっと感じが違うよね。

# Bazaar は Mercurial に近い上ロケールとかしっかり作ってあるけど遅そう。

Mercurial でいいや。とか思ってたんだけど、このスレ見てると、やっぱ git が気になってw
0159デフォルトの名無しさん2010/11/07(日) 05:08:52
ほー。今度使ってみようかな
0160デフォルトの名無しさん2010/11/07(日) 08:42:55
hgは基本機能は限定されているけど、hgに同梱されている拡張のMQを使えばほぼgitと同じことができる。
hgとgitは概念的にはかなり似ているけど、決定的に違うのがブランチの考え方。
hgの名前付きブランチがgitに無い。
0161デフォルトの名無しさん2010/11/07(日) 11:59:47
>>160
名前付きブランチってどういう感じのもの?
0162デフォルトの名無しさん2010/11/07(日) 12:30:21
> >>160
> 名前付きブランチってどういう感じのもの?
1つ1つのブランチにリビジョンの名前が埋め込まれている。
だから、マージしても元のブランチが分かる。
gitのブランチは特定のリビジョンに対するポインタだから、マージしてブランチを消すと
どっちのブランチなのか分からなくなる。
0163デフォルトの名無しさん2010/11/07(日) 12:35:01
すまん。肝心な所で間違った。

誤)
1つ1つのブランチにリビジョンの名前が埋め込まれている。
正)
1つ1つのリビジョンにブランチの名前が埋め込まれている。

> >>160
> 名前付きブランチってどういう感じのもの?
1つ1つのリビジョンにブランチの名前が埋め込まれている。
だから、マージしても元のブランチが分かる。
gitのブランチは特定のリビジョンに対するポインタだから、マージしてブランチを消すと
どっちのブランチなのか分からなくなる。
0164デフォルトの名無しさん2010/11/07(日) 12:51:30
>>163
なるほど、なんか分かった。確かにGitはブランチの名前自体には意味を持たないので、
最初使い始めの頃はそこに戸惑った気がする。この変更ってどこから(どのブランチから)
来たんだろ?って思った時によく分からないんだよね。
マージコミットのログメッセージにブランチ名が書かれるから、gitkとかで視覚的に見れば
なんとなく分かるけど、それでもFast-forwardだったりすると完全に統合されちゃうから、
masterでやった作業なんだかtopicでやった作業なんだか、一見分からない。
0165デフォルトの名無しさん2010/11/07(日) 12:55:13
俺も1人で開発する時はmercurialだな。
慣れてるからってのもあるが開発に全く無駄が入らない。
コミットを綺麗に整形したい時はgitを使う。
0166デフォルトの名無しさん2010/11/07(日) 17:25:47
GitExtensionでgit rebase -i 相当のことをするにはどうすればいい?
0167デフォルトの名無しさん2010/11/08(月) 03:02:41
Subversionのときはコミットミスっても気にならなかったが、
gitだと下手に直せるからつい気になるわ

>>164
履歴をフラットにしたくて気軽にrebaseすると、rebase前のブランチなくなって焦るわw
仕様上、当たり前なんだが

cherry-pickするか別のブランチ名つけろ、というのはそうなんだけど
0168デフォルトの名無しさん2010/11/08(月) 09:46:43
>>164
そこで git merge --no-ff
0169デフォルトの名無しさん2010/11/08(月) 10:46:33
fast-forward の意味がいまだにわからない‥‥
0170デフォルトの名無しさん2010/11/08(月) 17:11:03
>$ git checkout master
>$ git merge hotfix
>Updating f42c576..3a0874c
>Fast forward
>README | 1 -
>1 files changed, 0 insertions(+), 1 deletions(-)
>このマージ処理で 『Fast forward』 というフレーズが登場したのにお気づきでしょうか。マージ
>先のブランチが指すコミットがマージ元のコミットの直接の親であるため、Git がポインタを前に
>進めたのです。言い換えると、あるコミットに対してコミット履歴上で直接到達できる別のコミットを
>マージしようとした場合、Git は単にポインタを前に進めるだけで済ませます。マージ対象が分岐し
>ているわけではないからです。この処理のことを 『fast forward』 と言います。
0171デフォルトの名無しさん2010/11/09(火) 00:15:29
>>169
fast forward=ブランチのポインタをずらすだけ

分岐してなければ、これでいけることが多い


分岐しててfast forwardしたければ、rebaseしてコミットを直線にして分岐なくせばfast forwardできるが、
以前のブランチなくなるから注意。
これ防ぐには別のブランチ名つけておけばよかったはず。


そういえばpush(git svn dcommit)したあとに間違えてgit commit --amendしてしまっていて、
fast forwardなmergeができずあとから気づいてあせったことある。
rebaseだと駄目で、cherry-pickでamendした分を飛ばして解決したが他にいい方法合ったのか
0172デフォルトの名無しさん2010/11/09(火) 02:47:58
分かった気がする
ブランチの方に進んだだけの状態と、
ブランチの方に進んで一方masterの方も進んでいる状態の
2パターンでmasterにマージしてみたら前者だけがfast-forwardって出たわ。
前者は別にマージする必要というか絶対コンフリクトしないから
ただポインタをブランチの先頭だったところにずらしました、ってことだな
0173デフォルトの名無しさん2010/11/10(水) 17:09:04
git checkout の対象がブランチか、ディレクトリか判断つかないとき
git checkout dir/ とやってみたらディレクトリに反応して俺すげー
とおもってマニュアル見たら git checkout -- dir とすりゃよかったのな
0174デフォルトの名無しさん2010/11/11(木) 09:40:29
>>172
fast-forward mergeとそうでないmergeは、gitk --allでマージ前とマージ後を見ながら視覚的に確認するとわかりやすいよ
0175デフォルトの名無しさん2010/11/11(木) 10:28:02
gitk --all やってみたらマージで混乱してた頃の
枝がはちゃめちゃに混線しててワロタ
0176デフォルトの名無しさん2010/11/12(金) 11:44:13
書いてたらgit関係ないことに気づいたけどそのまま投稿するね

githubで公開されてるライブラリがあるのです
で、そのライブラリのバグを直そうと思いました
でも、バグ近辺関連のテストが全然ない上に、この訂正の適用前後で微妙に動作が変わります

・訂正前のメソッド動作はこういう単体テストを満たすものでした(を自作で追加する)
・訂正前と訂正後でこのように動作が変わりますつまりこの訂正コードは正当です
・訂正後のメソッド全体の単体テストです

の3種類のテストが、少なくともpullリクエストでの説得に必要な気がするのです
うまいまとめ方ないでしょうか
訂正後のメソッドについてのテストだけだと、
「この動作は以前のコードではどうだったの?」という情報がなくて困りそうで
0177デフォルトの名無しさん2010/11/12(金) 11:58:45
githubのpullリクエストの現在の挙動は、
ブランチに対してリクエストを出して、その後、そのブランチにコミットを追加すると、pullリクエストも伸びていく。
だから、pullリクエストはブランチ単位で分けた方が良いのでは?
マージするかどうかは、そのリクエスト先が判断すれば良い気がする。
0178デフォルトの名無しさん2010/11/12(金) 12:07:11
ブランチ単位で説得して、ブランチの中のどのコミットを採用するかはまぁすたぁに任せる
だから普通に「○○を改善するブランチ」を作って、
訂正前コードに対するテストをコミットして(a)、
比較対照テストをコミットして(b)、
比較対照テストの部分を極力編集しないように訂正後のコードに対するテストをコミット(c)すればいいのでは
まぁすたぁはおそらく
「コミットすべてを見て納得して、(a)と(c)だけ受け入れ、適当にCHANGELOGを書く」
ということをするはず

…慣れてればな
…慣れてればね
慣れてないと「こんな大きいの無理です入りませんいやっやめてっ」とか返事が返ってくる
0179デフォルトの名無しさん2010/11/12(金) 20:18:51
このへんの作法みたいなのの説明ってあんまりないよね
他者と関わりあっていかなければならないソフトウェアなのにさ
0180デフォルトの名無しさん2010/11/14(日) 09:59:04
パッチはメールの本文にベタで置かないと読まないとかいうプロジェクト管理者もいるし、
いろいろなソフトをひとまとめにできるルールなんて作れない
0181デフォルトの名無しさん2010/11/15(月) 10:33:41
gistが壊れてないか?
"New Gist"でPublic Gistを作ると
無関係のランダムな既存のgistからforkしたみたいになる
Privateだと起こらなかった。昨日から使い始めたんだか元々こうなの?
0182デフォルトの名無しさん2010/11/15(月) 10:52:46
https://github.com/blog/744-today-s-outage
■ このスレッドは過去ログ倉庫に格納されています