Git 2
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2010/09/14(火) 21:38:18◆前スレ
git スレッド
http://hibari.2ch.net/test/read.cgi/linux/1197798039/
◆関連サイト
Git入門
http://www8.atwiki.jp/git_jp/
0153デフォルトの名無しさん
2010/11/07(日) 03:31:14逆引き的なドキュメントが少ないという話であれば
ProGit一通りよむとかなり解決するが
http://progit.org/book/ja/
0154デフォルトの名無しさん
2010/11/07(日) 03:38:18Subversion使っていてこういう機能欲しかったんだ、というのがあったり
TortoiseSVNからコマンドラインに移行したのも理由だと思うが
ただ、>>152がいうのもわからなくはなくて、〇〇はrebaseでできる、といった場合に、
何故○○というコマンドじゃないのか?と思ったり、
もちろん基本的なコマンドは用意しとくから、各個人勝手にaliasしろや、
という一貫したなげやり感もUNIX的にはわからんでもないし、
出来る事多いからコマンドかなり増えるだろうし。
Bazaarは確か標準のaliasもあるしかなりコマンドあったはず。
どっちがいいかという話だな。GUIがメインならコマンド多くても気にならないんだけどね。
0155デフォルトの名無しさん
2010/11/07(日) 03:59:41何もできなかっただろう、という気はする
0156デフォルトの名無しさん
2010/11/07(日) 04:25:12それはわかってるんだけど、
どうも Mercurial から移行できない。
0157デフォルトの名無しさん
2010/11/07(日) 04:25:500158デフォルトの名無しさん
2010/11/07(日) 05:02:34git は便利な分だけ覚えなきゃなんないことがある。ちょっと感じが違うよね。
# Bazaar は Mercurial に近い上ロケールとかしっかり作ってあるけど遅そう。
Mercurial でいいや。とか思ってたんだけど、このスレ見てると、やっぱ git が気になってw
0159デフォルトの名無しさん
2010/11/07(日) 05:08:520160デフォルトの名無しさん
2010/11/07(日) 08:42:55hgとgitは概念的にはかなり似ているけど、決定的に違うのがブランチの考え方。
hgの名前付きブランチがgitに無い。
0161デフォルトの名無しさん
2010/11/07(日) 11:59:47名前付きブランチってどういう感じのもの?
0162デフォルトの名無しさん
2010/11/07(日) 12:30:21> 名前付きブランチってどういう感じのもの?
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なるほど、なんか分かった。確かにGitはブランチの名前自体には意味を持たないので、
最初使い始めの頃はそこに戸惑った気がする。この変更ってどこから(どのブランチから)
来たんだろ?って思った時によく分からないんだよね。
マージコミットのログメッセージにブランチ名が書かれるから、gitkとかで視覚的に見れば
なんとなく分かるけど、それでもFast-forwardだったりすると完全に統合されちゃうから、
masterでやった作業なんだかtopicでやった作業なんだか、一見分からない。
0165デフォルトの名無しさん
2010/11/07(日) 12:55:13慣れてるからってのもあるが開発に全く無駄が入らない。
コミットを綺麗に整形したい時はgitを使う。
0166デフォルトの名無しさん
2010/11/07(日) 17:25:470167デフォルトの名無しさん
2010/11/08(月) 03:02:41gitだと下手に直せるからつい気になるわ
>>164
履歴をフラットにしたくて気軽にrebaseすると、rebase前のブランチなくなって焦るわw
仕様上、当たり前なんだが
cherry-pickするか別のブランチ名つけろ、というのはそうなんだけど
0168デフォルトの名無しさん
2010/11/08(月) 09:46:43そこで git merge --no-ff
0169デフォルトの名無しさん
2010/11/08(月) 10:46:330170デフォルトの名無しさん
2010/11/08(月) 17:11:03>$ 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:29fast 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:04git checkout dir/ とやってみたらディレクトリに反応して俺すげー
とおもってマニュアル見たら git checkout -- dir とすりゃよかったのな
0174デフォルトの名無しさん
2010/11/11(木) 09:40:29fast-forward mergeとそうでないmergeは、gitk --allでマージ前とマージ後を見ながら視覚的に確認するとわかりやすいよ
0175デフォルトの名無しさん
2010/11/11(木) 10:28:02枝がはちゃめちゃに混線しててワロタ
0176デフォルトの名無しさん
2010/11/12(金) 11:44:13githubで公開されてるライブラリがあるのです
で、そのライブラリのバグを直そうと思いました
でも、バグ近辺関連のテストが全然ない上に、この訂正の適用前後で微妙に動作が変わります
・訂正前のメソッド動作はこういう単体テストを満たすものでした(を自作で追加する)
・訂正前と訂正後でこのように動作が変わりますつまりこの訂正コードは正当です
・訂正後のメソッド全体の単体テストです
の3種類のテストが、少なくともpullリクエストでの説得に必要な気がするのです
うまいまとめ方ないでしょうか
訂正後のメソッドについてのテストだけだと、
「この動作は以前のコードではどうだったの?」という情報がなくて困りそうで
0177デフォルトの名無しさん
2010/11/12(金) 11:58:45ブランチに対してリクエストを出して、その後、そのブランチにコミットを追加すると、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"New Gist"でPublic Gistを作ると
無関係のランダムな既存のgistからforkしたみたいになる
Privateだと起こらなかった。昨日から使い始めたんだか元々こうなの?
0182デフォルトの名無しさん
2010/11/15(月) 10:52:460183デフォルトの名無しさん
2010/11/15(月) 13:10:360184デフォルトの名無しさん
2010/11/15(月) 17:16:20進行状況の表示もまったくないしいつになったら終わるんだこれは・・・
0185デフォルトの名無しさん
2010/11/15(月) 19:26:19異常終了してたような気がするな。。。
ローカルにあるならまだしも、リモートではもうやりたくないと思った。
0186デフォルトの名無しさん
2010/11/16(火) 02:54:100187デフォルトの名無しさん
2010/11/16(火) 03:21:07githubとかにもありそうな著名なプロジェクトなら、こういう手もある
git-svnを途中から始める - unpushの日記
http://d.hatena.ne.jp/unpush/20090826/1251281749
0188デフォルトの名無しさん
2010/11/17(水) 10:51:13簡単に入力できる仕組みはあるのでしょうか?
解説等を読んでも引数にSHAの頭数桁を指定しているだけで・・
0189デフォルトの名無しさん
2010/11/17(水) 11:44:01ハッシュの意味をよーく考えよう
0190デフォルトの名無しさん
2010/11/17(水) 15:50:39ターミナルからコピペするの楽だから大変と思ったことないな。
master~5みたいな記法使ったらどうだろ?
0191デフォルトの名無しさん
2010/11/17(水) 15:55:33それは使用環境が糞だというしかないな
0192デフォルトの名無しさん
2010/11/17(水) 16:37:39zshやbashならハッシュ一覧表示する補完関数書けばいけるかも。
0193デフォルトの名無しさん
2010/11/17(水) 17:09:010194デフォルトの名無しさん
2010/11/17(水) 18:37:54Terminalなのでコピペできるんですが,
どうしてもUNIXの保管になれてると少しだけ入力してTabで保管してくれないのかなー
等と欲がでてしまって・・(マウスも使っていないのでタッチパッドだとやりづらいorz)
Git自体にそういった保管機能はないということですね・・
git log --oneline で地道に拾います・・
0195デフォルトの名無しさん
2010/11/17(水) 20:17:47マウス使わないなら尚更screenがいいよ
0196デフォルトの名無しさん
2010/11/18(木) 03:08:530197デフォルトの名無しさん
2010/11/18(木) 06:20:40こんなのあったんだ。
これってローカルのブランチ名と違うの?
ローカルのブランチ名に近い範囲だったら >>190の記法でいけるんじゃないの
0198デフォルトの名無しさん
2010/11/18(木) 08:00:45ローカルブランチと同じだよ。
refs/heads/〜とかrefs/remotes/〜とかはそこまでを省略して指定することができる。
ちなみに.git/HOGEHOGEとかを勝手に作ってもgit log HOGEHOGEとか出来ちゃう。
0199デフォルトの名無しさん
2010/11/18(木) 11:08:080200デフォルトの名無しさん
2010/11/19(金) 11:17:350201デフォルトの名無しさん
2010/11/19(金) 11:23:35githubについてはドキュメント足りないよね
pullリクエストを送るボタンの押し方なんて本気でどうでもいい
pullリクエストとして送る予定のコミットのいい書き方とか
pullリクエストの受け入れ方とか吟味の仕方とか説明がない
0202デフォルトの名無しさん
2010/11/22(月) 02:59:59一意に決まる場合はハッシュの頭数文字だけの入力で適切に処理される。
0203デフォルトの名無しさん
2010/11/22(月) 03:19:550204デフォルトの名無しさん
2010/11/27(土) 00:44:29git commit -m "git boy"
としてindexに追加、コミットした後で余計なファイルをコミットしていたと気づいたので
ファイルはそのままにコミット前に戻したいと考えました。
(実際にはCygwinでファイルのモードを変更したつもりがないのに、
core.filemode = falseにし忘れていて意図せずファイルのモードが変更されまでがaddしてしまったのです)
git reset --soft HEAD^
のように編集したファイルはそのままにしてコミットを取り消すことが出来ますが、
git add .
が取り消すことができませんでした。
そこで、
git add -r --cached .
としたのですが、git addしたもの以外も全て取り除いてしまうようです。
git addしたもののみ的確に取り消すにはどうしたらよいでしょうか?
0205デフォルトの名無しさん
2010/11/27(土) 01:11:110206デフォルトの名無しさん
2010/11/27(土) 01:25:12あれ?それでいいんだ
いけました
ありがとうございました!
0207デフォルトの名無しさん
2010/11/27(土) 13:17:580208デフォルトの名無しさん
2010/11/27(土) 13:35:42gitosis
0209デフォルトの名無しさん
2010/11/27(土) 15:06:43そういう意味じゃないんじゃない?
submodule とか? でもあんま使い勝手良くないんだよねぇ。
0210デフォルトの名無しさん
2010/11/29(月) 02:29:52というぐらいのGit使いが身近にいればな・・・
名古屋近辺にいないかな?
0211デフォルトの名無しさん
2010/11/29(月) 10:04:51ttp://atnd.org/events/7556
のような集まりに参加すればいいんじゃないか。
ひとまず git 名古屋 でググれ。
0212デフォルトの名無しさん
2010/11/29(月) 12:04:24B:個人修正用リポジトリ(自動的にCにプッシュ)
C:修正&テスター確認用ディレクトリ
D:本番適用待ちディレクトリ
D ---- RepoA (master) RepoB (master) ---- C
|_________|
T
Local
現在上記のような形でローカルでブランチを切り替えて運用しているのですが
このような形だと当然だとは思いますが、歴史がおかしいとしょっちゅう怒られ、
サクサクと作業をすすめることができません・・
例えばRepoBには修正過程のゴミコミットがたまり続けるので
修正が完了してRepoA用のブランチにマージする際、
その修正をrebase -iでまとめてからRepoAブランチからcherry-pickしているのですが、
これをやってしまうと別の作業でRepoBにプッシュすると怒られてしまうという状態です
もっと上手な運用方法はないでしょうか・・
0213デフォルトの名無しさん
2010/11/29(月) 12:47:150214デフォルトの名無しさん
2010/11/29(月) 13:11:34RepoAに切り替える
(RepoBのものを)整形したコミットをpush
RepoBに切り替える
ゴミコミットを取り消すためreset --hard
RepoAからcherry-pick
push
もしかしてresetした?それなら怒られて当然だ
普通に1つの共用リポジトリで
masterとstableブランチ作って運用するのじゃ駄目なの?
0215デフォルトの名無しさん
2010/11/29(月) 14:20:47開発に参加している各人がRepoBを持っていたほうが
お互いの修正がバッティングしにくいと考えたためです
RepoAに各人のブランチを作る方法も考えたのですが
開発に参加する人数が増えるとそのたびにブランチを切らないといけないのかなーと・・
どのみち各人のRepoBを作成しているのでそのほうがめんどくさいかもしれない・・ですね・・・
0216デフォルトの名無しさん
2010/11/29(月) 14:29:14・各自そこから中央にpush
・メンテナが各自からpull
のどっちかをやって、その都度当事者が責任を持ってコンフリクトを解消する。
お互いの修正がバッティングするのは分散して作業していれば必ず起こりうることで、
どこかでそれを解消したらそれ(マージされた状態)を保持しつづけるようにする
姿勢が必要。rebaseやcherry-pickしたら、された側のブランチは捨てるつもりで
やる必要がある。
0217デフォルトの名無しさん
2010/11/29(月) 22:37:21個人用のリポジトリRepoBを外にも持つ理由がわからない。
冗長性を保つためだけの存在なら、ローカルから直接本番のリポジトリRepoAにプッシュせず、RepoBでブランチ切ってmasterへのマージ時にRepoAへプッシュするようHookさせたらいいんじゃないか?
0218デフォルトの名無しさん
2010/11/30(火) 03:28:14とりあえず@bleisさんという人が詳しいみたいです。
どんな人か知りませんが。
0219デフォルトの名無しさん
2010/11/30(火) 17:53:39http://keijinsonyaban.blogspot.com/2010/10/successful-git-branching-model.html
0220デフォルトの名無しさん
2010/12/01(水) 08:41:100221デフォルトの名無しさん
2010/12/01(水) 08:50:240222デフォルトの名無しさん
2010/12/01(水) 16:16:08ナカーマ
git svn使うときはrebaseしまくりだわ
でも最近面倒なのでsvnにあるまじきリモートブランチ切りまくり
0223デフォルトの名無しさん
2010/12/01(水) 17:02:16svn側でブランチとか作ってもけっきょくただのコピーだし、gitから見れば別モノなわけで。
svnのDBにGit互換の世界が作れればいいんだけどねぇ。propsとかでどうにかならないかな。
0224デフォルトの名無しさん
2010/12/01(水) 22:46:16.svnと.gitが共存するスペースを作れば種々の問題が解決した
0225デフォルトの名無しさん
2010/12/01(水) 22:58:090226デフォルトの名無しさん
2010/12/01(水) 23:01:320227デフォルトの名無しさん
2010/12/01(水) 23:34:57大した手間じゃないし
0228デフォルトの名無しさん
2010/12/02(木) 00:02:45Tower - The most powerful Git client for Mac
http://www.git-tower.com/
0229デフォルトの名無しさん
2010/12/02(木) 00:25:06やたらオサレだな。gitもマカーにかかればこうなるのかw
0230デフォルトの名無しさん
2010/12/02(木) 00:52:12毎回思うんだがgoogleの機能紹介アニメ作る人とか、レタッチツールやDAWのデベロッパには劣等感を感じてしまう。
飛車と角が合体したような連中ってのはいるもんなんだな。
0231デフォルトの名無しさん
2010/12/02(木) 01:03:460232デフォルトの名無しさん
2010/12/02(木) 02:33:05http://www.git-tower.com/img/screenshots/history_recent_big.jpg
うける
0233デフォルトの名無しさん
2010/12/02(木) 11:02:16modifiedとなる場合とならずにNot currently on branchとだけ表示されてcontinueできない
0234デフォルトの名無しさん
2010/12/02(木) 23:30:20Queen最強、と思ってたらKnightによくヤられる
0235デフォルトの名無しさん
2010/12/02(木) 23:34:35試した人感想くれ
gitじゃないけどBzrExplorerはいい線いっていると思うけどね。
次に何すればいいかってのが分かる。
バージョン管理ソフトばかりの話しではないけど慣れないときに困るのが、なにすればいいねん?ってことだからな
0236デフォルトの名無しさん
2010/12/03(金) 00:53:570237デフォルトの名無しさん
2010/12/03(金) 01:22:150238デフォルトの名無しさん
2010/12/03(金) 08:59:01が、俺の感想。
0239デフォルトの名無しさん
2010/12/07(火) 09:11:31これが日本語ファイル名を扱う唯一の手段?
みんな日本語ファイル名をどうやって扱ってるのかな?
コードは日本語ファイル名はないと思うけど、ドキュメントとか普通日本語でしょ。
ドキュメントはバージョン管理しないの?
0240デフォルトの名無しさん
2010/12/07(火) 09:27:13クライアントがSJISのWindowsマシンで開発して、リポジトリをLinuxにおいているような場合
0241デフォルトの名無しさん
2010/12/07(火) 09:38:480242デフォルトの名無しさん
2010/12/07(火) 09:42:310243デフォルトの名無しさん
2010/12/07(火) 11:20:19cygwin使えば使えるらしい
0244デフォルトの名無しさん
2010/12/07(火) 12:11:54あれはどうやって解決してるんだろう
0245デフォルトの名無しさん
2010/12/07(火) 12:18:380246デフォルトの名無しさん
2010/12/07(火) 12:19:200247デフォルトの名無しさん
2010/12/07(火) 12:20:37「UTF-8決め打ちでプログラムがファイルパスを自動変換する」
という台詞を見て何も感じない人向けのソフトウェアではない
0248デフォルトの名無しさん
2010/12/07(火) 12:34:12違うよ。LANGで勝手に変換しちゃうんだよ。大きなお世話、勘違いだけど。
それが簡単だと思っているんなら、SubversionかBazaar使って満足していれば?
0249デフォルトの名無しさん
2010/12/07(火) 12:49:46特定プラットフォーム限定のLANGとか持ち出して勘違いとか言われても
0250デフォルトの名無しさん
2010/12/07(火) 12:55:49SubversionとBazaarがLANGで勝手に判定する勘違いアプリってこと
0251デフォルトの名無しさん
2010/12/07(火) 13:09:26ヨハネスが上手く作りこめる訳がないな
0252デフォルトの名無しさん
2010/12/07(火) 13:23:09おまえ日本人か、みたいな日本語べったりの外国人エンジニアなら可能かもしれんがまあ稀だな
俺らがやるヨーロッパ系言語のISO-8859-Xの扱いがへにょいのと同じ理屈
■ このスレッドは過去ログ倉庫に格納されています