TOP カテ一覧 スレ一覧 100〜終まで 2ch元 削除依頼
スレ立てるまでもない質問はここで 148匹目
プログラミング始めたいんだけどどこ言語がいい?
C++Builder相談室 Part21
プログラム板自治スレッド その16
C言語なら俺に聞け 154
【会津】パソコン甲子園2004【若松】
スレ立てるまでもない質問はここで 152匹目
リーダブルコーディング技術スレ
新言語を開発したい
【PHP】下らねぇ質問はここに書き込みやがれ 2

Gitをより良くするための運用ガイドライン作成スレ


1 :2015/06/07 〜 最終レス :2020/01/10
gitのコミットをより意味があるようにするためのガイドライン作成スレです。
なぜコミットはあるのか? コミットが残っていることで
何の役に立つのかをよく考えましょう。

そしてガイドラインを言う時は、ちゃんと理由も書きましょう。
上司が言ったから絶対なんだ!今までそれでやってきたからそれでいいんだ!
みたいなのは理由ではありません。

2 :
少しだけガイドライン考えてみた


・一つのコミットで複数の修正を行わない
理由 後からそのコミットを見た時何を修正したのかがわからなくなるから

・一つの修正を複数のコミットにわけない(分かれていればまとめる)
理由 後からそのコミットを見た時何を修正したのかがわからなくなるから
例外 リリースしてしまったコミットはまとめることは出来ない。


いま気づいたが、この「リリース」っていう概念が重要だな。
どの時点でリリースになるのかはそれぞれだろうが
master、もしくは共有ブランチににマージされた時点がリリースだと考える。


と考えると、やはり>>569の例ははマージ機能を使ってない時点で
一人で開発している場合にのみ通じる例だから、例としてふさわしくないんだよ。

3 :
>>585
> >>541>>545のやりとりにあるように、「共有ブランチにpushしたコミットすら編集してよい」

いないだろw

あぁ、なんで共有ブランチにpushしたコミットは
編集したらだめなのかを書いていなかったね。

物事は単純で、他人の役に立つことをしましょう、
他人の迷惑になることはうやめましょう。これだけだよ。

コミットは他人が見ることを考えれば、そして他人は何故見るのかを考えれば
コミットを綺麗にしておけば可読性が高くなって読む人の負担が減る。
これは他人の役に立つこと。

そして共有ブランチを修正したらだめというのは、他の人も
その共有ブランチから派生して修正しているので、その派生元が変わると
今まで参照していたものが履歴を残さずに変わるわけで何が起こったのかわからなくなるから。
これは他人の迷惑になること。

このように俺のガイドラインにはちゃんと理由がある。
反対のガイドラインを作りたいなら、その理由をいうことだけ。
でないと俺の意見に対抗できない

4 :
念の為に俺が言ってる「共有ブランチ」の定義を書いておくわ。

俺が言ってる共有ブランチっていうのは、
他の人がそのブランチから作業をする、
または他の人がそのブランチにマージすると
という目的で作られたブランチのこと。

つまり他の人が参照しているだけならば
共有ブランチとは言わない。
参照しているだけならば、そのブランチが変わっても
他の人の作業のじゃまにはならないからね

5 :
まともなGUIマダー?

6 :
Visual Studio内蔵のGitのインターフェースは最初わけわからなかった

7 :
       M.ハ从人ノヽ
      イリ       ノリ,,     「ウンコはトイレでしろ」
      メ _,,,,,,,,,,,,,,,,,,,_ .K    こういう凝り固まった脳みその奴って出世できなさそうだよな
     メ i        7 .K    こんなバカがウンコしたい時にトイレ探し回ってるの見ると爆笑もんだわ
     ヨ .y -一  ー- !, f     トイレなんてただ座ってウンコをするための部屋にすぎないんだよ
     r! .!. ィtァ   tァx .!.¥     喉乾いたら何が何でも喫茶店入らなきゃいけないって訳じゃないだろ
.     !,Y         f .!     探せば自販機もあるしコンビニもある
.      ]   、.`ー' .,  .├'     喫茶店も座って落ち着いて飲み物を飲む部屋にすぎない
.       !,    ̄ ̄   .ハ     つまりウンコしたくなったらトイレを必死で探す奴は選択肢を考えられない馬鹿
      /ゝ,      ,ノ ヽ,
    //.  i`゙'''''''''"´ /   |\,__,,,,,,
  ⌒  /   ',     /.   |     ヽ

8 :
運用で対処するより、Gitそのものが良くなる方がいいんじゃないかな?(´・ω・`)

9 :
>>8
Gitの適切な運用方法を語るスレだよ。

「Gitをよりよく使うための運用ガイドライン」にすればよかったかな。

Gitに問題があるって話じゃない。
Gitのコマンド体系はもう少し改良の余地があるとは思うが
機能自体には問題ないよ。

Gitは運用方法(フロー)をがっちり決めているわけじゃなくて、
git-flowとかgithub-flowとか細かいフローがあるが、
それでも基本的な考え方というのはある。

使いにくいと思ったら、使い方が悪いと考えた方がいい。

10 :
>>5 >>6
すれ違い。そういう雑談はこっち。

Git 12(c)2ch.sc
http://peace.2ch.sc/test/read.cgi/tech/1427085313/

ここはgit-flowやgithub-flowと言った
gitを使った運用方法を語るスレ。

11 :
スレの主旨を適切なタイトル名として表せないような能力しかない人間が
立てたスレって…役に立つの?(´・ω・`)

12 :
ちょっと出かけなきゃならなかったからとりあえずスレを立てたが、
テンプレ作りたいね。Pro Gitは当然として各運用フローのリンク
公式がよくわかんないんだけどこれでいいんだろうか?

・Pro Git
英語 https://git-scm.com/book/en/v2
日本語 https://git-scm.com/book/ja/v1

・git-flow
http://nvie.com/posts/a-successful-git-branching-model/

・github-flow
http://scottchacon.com/2011/08/31/github-flow.html

・gitlab-flow
https://about.gitlab.com/2014/09/29/gitlab-flow/


Qiitaのリンクを貼るのはあまりすきじゃないんだが、簡単にまとまってたので
テンプレに入れるかどうかは別として、とりあえず

Git利用時のフローはどれを使うか
http://qiita.com/tkhm/items/cc7855d32d640687b43c

13 :
そしてスレ盛るために転載(笑)

Git Flow

・使用するブランチ
  ・master マイルストーン用のブランチ
  ・develop 開発用のブランチ
  ・feature 機能追加用
  ・(hot)fix 不具合修正用
  ・release リリース準備用

・Git Flowの良さ
  ・fix(不具合)の数が一目瞭然
  ・masterを見ればマイルストーンの遷移が一目瞭然
  ・参考:git-flowとプロジェクトの運営

・Git Flowのまずさ
  ・ほとんどのツールがデフォルトでmasterブランチを表示するが、わざわざdevelopブランチに切り替えないといけない
  ・hotfixブランチをdevelop, master共に反映しなければならない点が面倒
  ・参考:【翻訳】GitLab flowから学ぶワークフローの実践内、Git-flowとその問題点
  ・参考:GitLab Flow

・GitHub Flowと比べると
  ・ブランチ間の移動や、複数ブランチへのマージの発生量が多くなりがち
  ・一定期間終了した後に全ブランチの遷移などを俯瞰すると開発の様子がわかりやすくて良いかもしれない
  ・一方で、開発中は開発者の負担が少し多くなるかもしれない

14 :
GitHub Flow

・使用するブランチ
  ・master 開発用のブランチ、masterはテスト済で本番環境へのデプロイ可能
  ・topic 機能追加用/不具合修正用のブランチ

・Git Flow、GitLab Flowと比べた特徴的な点
  ・masterは常にデプロイ可能という前提
  ・リリースはmaster更新の都度頻繁に、といったイメージ
  ・参考:GitHub Flow
  ・参考:GitLab7.1.1でGitHub Flowを実践してみた!

GitLab Flow

・使用するブランチ
  ・master 開発用のブランチ
  ・topic 機能追加用/不具合修正用のブランチ
  ・production テスト済で本番環境へのデプロイ可能なブランチ(自動テストの対象にしたりする)
  ・release リリース準備用

・GitLab Flowでのfix(不具合修正)の扱い
  ・masterから修正用のトピックブランチを切る
  ・修正内容を実装後、Merge Request(Pull Request)
  ・masterにマージ(トピックブランチは削除)
  ・cherry-pickでfix部分のみをreleaseへ反映

15 :
何かバグフィクスしてる時、全く関係ないけどちょっとした修正個所を見つけて思わず直してしまい、
そのまままたバグフィクス作業に戻って最後にコミットする段階になった。

>>2 に従うなら「バグフィクス」と「無関係のちょっとした修正」は分けてコミットすべきなんだが・・・

さて、どうしたものか。

16 :
>>2
なんだこの馬鹿ルールは。

17 :
まだ機能がロクにできあがってない完成前の作成中の段階って、ブランチわける適切な粒度がよくわからないんだけど
svnみたく基本master直コミットで、切りたいときだけ適当に切る感じでやってる?

18 :
>>15
> >>2 に従うなら「バグフィクス」と「無関係のちょっとした修正」は分けてコミットすべきなんだが・・・
それは当然分けてコミットするべきだよ。

実際の開発でもよくある話で、スペースでインデントするという
規約なのに間違えてタブになっていたりね。

そういうのがバグフィックスに含まれていると、本当にしたかった
バグフィックスのコードは何なのかわからなくなってしまう。

別コミットにした上で、バグフィックスとは分けてマージしてしまうのがいい。
本当に「ちょっとした修正」であればバグフィックスと違って、
レビューはほぼ不要でマージできるはずだからね。


で、聞きたいのはコミットを分割する方法?

Pro gitにも書いてあるけどこんな感じだよ。

コミットの分割
https://git-scm.com/book/ja/v1/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-%E6%AD%B4%E5%8F%B2%E3%81%AE%E6%9B%B8%E3%81%8D%E6%8F%9B%E3%81%88#コミットの分割

1. git rebase -i で edit を指定して修正したいコミットで止める
2. git reset HEAD^ で修正したいコミットを未コミット状態に戻す
3. ちょっとした修正だけコミットする(git add -p などを使って)
4. バグフィックスをコミットする
5. git rebase --continueでrebaseを完了させる

19 :
>>16
分かったから、理由w 理由w

20 :
>>17
> svnみたく基本master直コミットで、

いやいやw svnでもmasterに直コミットなんかしないってw
(個人プロジェクトとか超小規模は除くけど)

まだsvn使ってる有名プロジェクトって何があるんだろう?
例としてtracを見つけてきたけどマージのほうが多いでしょ?
http://trac.edgewall.org/log/trunk


> まだ機能がロクにできあがってない完成前の作成中の段階って
疑問なんだけど、その作成中の段階のソースコードってどこにあるの?
まさかローカルのPCにあって、他の人はだれも見れない状態?

その機能を作るのに1日かからない程度の小さい修正なら、他の人が見れない状態でも
たいしてリスク無いと思うけど、数日とか数週間かかるようなものが
他の人が見れなかったらリスク高くなるよね?

作成に数日かかった大作を見せられて、それがクソコードだったとき、全部やり直しになってしまう。
だから少なくとも一日に一回はコードを他の人が見れるようにしないといけない。

そのコードは作成中なのだからmasterに入るわけがない。
ではどこに? → その答えがブランチでしょ?

> 完成前の作成中の段階って、ブランチわける適切な粒度がよくわからないんだけど
ということで「完成前の作成中の段階」と呼べる状態があるのなら、それがブランチになるんだよ。

21 :
>>20
最初のほうでもみんなトピックブランチみたいなの作業ごとに切って作業してるのかなあって思って
ただ最初は1個が本当に数週かかるし、ある機能が複数人に影響するのも多いから、それをいちいち各人が自分のブランチにマージするのかって考えると
1個のブランチにみんなで直接コミットしまくったほうがよくない?とも思ってどうしてるのかなあと

22 :
>>21
> 1個のブランチにみんなで直接コミットしまくったほうがよくない?とも思ってどうしてるのかなあと

(トピック)ブランチを作らないって話をしているんだよね?
1個のブランチにみんなで直接コミットしたら、問題が解決するのはなぜ?

みんなで仕事をしているのであれば、並行で作業が進む。
(1) -> (2) -> (3) ときて、二人の人が (3) から初めて、(4a) と (4b) というコミットを作る。
この時、早く完成した人(仮に4aとする)だけが、(4)にできる。(4b)はそのままコミットできない。

ブランチを作らないならば、(4b)は(4)を元にrebaseしてからじゃないとコミットできないし、
(4b)の人が(4a)のコードが必要ならば、やっぱりrebaseが必要。


で、ここでブランチを作るならば、

(1) -> (2) -> (3)ときて、二人の人が (3) から初めて、(4a) と (4b) というブランチを作る。
この時、早く完成した人(仮に4aとする)だけが、(4)としてマージできる。
(4b)はそのままじゃマージできないから、rebaseしてからマージする。

気づいた? やっていることは全く同じなんだよ。

違いがあるのはブランチを作れば作業途中であってもpushして
今開発中のブランチコードを他の人に見せることが可能。

(4b)は(4a)のコードが必要なのだから、見たいはずだよね?
でもブランチを作らなければそれができない。

23 :
>>21
で、なんで君が「1個のブランチにみんなで直接コミットしまくったほうがよくない?」と
思っているのか、その理由はわかってる。

直接コミットをすれば、すぐに他人のコードが「1個のブランチ」に取り込まれて
他の人はそれをすぐに利用できるからいい。と思ってるはず。

逆に言えば、(トピック)ブランチを切っていれば、そのブランチが
「1個のブランチ」に取り込まれるまで時間がかかる。
それぞれの開発者が、それぞれのブランチをずっと成長させていき、
その他人のブランチを、時々取り込まないといけなくなる。と思っているはず。


それはトピックブランチの扱いを間違っているだけだよ。
トピックブランチでやる内容は凄く小さい。
トピックブランチは頻繁に「1個のブランチ」にマージされる。

みんなが直接コミットしまくるのと同じぐらいの頻度で
「1個のブランチ」にマージされるんだよ。


ちなみに「1個のブランチ」がmasterであるか、次期リリース用ブランチであるかは
gitフローなのかgithubフローなのかによって変わる。

24 :
>>21
君が抱えている問題を解決するヒントを一つ提示しよう。

ある機能を作ることになった。その機能のために1つのブランチを作る。
(ここまではsubversionでも一緒だろう)

そしてそのブランチを作っている間に、ある便利な関数を作った。
その便利な関数は、他の人も使う。

のであれば、君が作っているある機能の完成を待たずして、その便利な関数だけをマージする。
出来上がった所から取り出して、早くマージしてしまえばいいんだよ。
(こういうことがsubversionではやりにくい)


この発想ができるようになれば、中途半端なコードをマージすることもないし、
みんなで直接コミットしまくるのと同じように頻繁にコミットできて
それをするために、自分の作業履歴(コミット)を自由に入れ替えて
歴史を修正することができるgitの重要さが理解できるようになる。

25 :
糞スレ終了

26 :
俺ルールを押し付けんなクズ >>1

27 :
やれやれ。荒らしたい奴は来なければいいのに。
なんのためにこっちに移動したのか?

28 :
>>1の説明は論理的で分かりやすいです。
質問に対して、自分のガイドラインに従った場合の解決方法をちゃんと示しています。

何を重要視しているのかが明確に示されていて、それが自分に合う人にはとても参考になると思います。

>>25>>26 などは、たぶん合わなかったのでしょう。
Git人口はとても多いので、当然そういう人も大勢いると思います。
彼らが従うガイドラインも見てみたいです。


ちなみに私は >>15 ですが、とても参考になりました。

29 :
なぜグローバルなガイドラインを語らずに身勝手な自分ルールを持ち出すの?
独り言はツイッターでやってろ

30 :
> なぜグローバルなガイドラインを語らずに

なにいってんの? グローバルなやり方を説明してるだけなんだが。
OSSのmasterのマージコミット(単なるコミットではなく)を見てみろよ。

マージコミットの中で、typoの修正とかありえないし
コミットの内容もその順番も明確になってる。

開発でそんな綺麗に作業なんて出来ないし、
そもそもマージ前にレビューがはいるのはやり直す必要がある場合が多いから。
そのやり直しを感じさせないぐらいに綺麗に整理されてからマージされてるんだよ。

31 :
>>28
どうもどうもw

git歴は2年ぐらいかな。当初というかgit始める前から
可読性ならず可レビュー性を重視していたからね。

Subversion使ってる時にレビューしていて、

あれ?この修正不味くない?
あー、あとのコミットで修正されてるのかー!
みたいなのとか

いきなり一週間分の修正をまとめて持って来られたって
解読に時間掛かり過ぎる、細かく分けて持ってこいよ。
とか

これじゃレビューできるわけ無いよね。みたいなのをどうするかを考えていた。
Subversionでも出来ないことはないんだが、いちいちネットワークにつないで
何度も送信しないと行けないからストレスが溜まる。gitだとそれを素早くやれる。

それを元にいろんなOSSの履歴を見ながら、それに近いことを実現する
フローはどういったものかを考えてまとめたのがこのスレで俺が言ってることだよ。

32 :
>>30
一個でも良いから、具体例を一つリンクしてくれないかな?

33 :
グローバルだからってどんな現場にもgit-flowを当てはめるような思考停止は
設計できないデジドカっぽくって嫌いだね

34 :
>>32

gitの使い方の具体例なら、gitプロジェクトでいいでしょw

目指すはこんな感じのコミットログだよ。
https://github.com/git/git/commits/master
masterにマージされるのは、無駄のないきれいなコミット。


あとは、マージされたPull requestsの方をみればいいんじゃないかな?
https://github.com/git/git/pulls?q=is%3Apr+is%3Aclosed

マージを許可されるブランチというのは、どうブランチであるべきかってのがわかる。
だいたいは小さな修正でコミットも一つだけど、複数のコミットからなるブランチもある。


これなんか1つのファイルに対して18個のコミットで修正しているけど、
それぞれのコミットが、ちゃんとタイトル通りの内容で少しずつ修正されており
何をしたのかわかる可読性の高いブランチになってる。
https://github.com/git/git/pull/54/commits

「一つのファイルの修正だからって全部まとめたら何やってるのかわからんだろうが」と言われない良い例だね。

35 :
>>33
どのフローであっても、ゴミコミットは入れない。
コミットは後から見てわかるように可読性が高い綺麗なものにして
マージするっていう点は全部一緒だよ。

36 :
>>34はちょっとミスった。
これマージされなかったブランチかw
まあ綺麗に整理されてるってのは間違ってないけど。

代わりにマージされたもので複数のコミットからなるやつを持ってきたよ
https://github.com/sdsykes/fastimage/pull/27/commits


例の有名な記事にかいてあったやつだけど

Why I Won't Squash My Commits
http://blog.marc-andre.ca/2014/02/05/why-i-wont-squash-my-commits/

[翻訳] 私のコミットをまとめないで
http://qiita.com/gogotanaka/items/8c55f69120965b077737

37 :
つまり、誰もが「無駄かどうかを決めるのは俺様(キリッ」て言って譲らないから
Gitは有効に使えるツール足り得ないってことだよね?(´・ω・`)

38 :
その通り
馬鹿には無理

39 :
業務用のシステムを管理するには?どういう方法が良い?
初期開発は良いとしても
本番リリースした後は
本番稼働のもの
本番でバグが発覚(複数)して対応中
改良もはいってる
とかになるとどう分けていつコミットやプッシュするべき?

40 :
ただ使うだけならコマンド叩くだけなんだからなんも考えんでも使える
gitの本当に難しいところは、自分のプロジェクトでどう使うか

41 :
>>39
それがコミットを意味がある単位で細かく分けろって話にもつながるんだよね。

バグをどうリリースするかはバグの内容による。改良のリリースも同じ。

緊急で出さなきゃいけないものは緊急で出す。
そういうのは見つかった段階ですぐに対応しなきゃいけないから
最新のリリース版からブランチを切って作ったブランチをリリース版にマージ。
そしてそれを開発版にもマージって流れになるだろうね。

あとはブランチ(=バグや新機能)をリリースしたい順にマージ[*]していけばいい。

よくあることだが、新機能がバグの修正に依存しており、新機能の作成中に見つかった。
という話しなら、先にバグを直して(バグ修正ブランチを作ってマージ[*])、
そこから新機能を作ったことに歴史を書き直せば良い。

[*] の部分だがどこにマージするかは方針と内容次第。
すぐにmasterにマージすることもあるし「次期バージョン」という考え方を
しているのなら次期バージョンブランチを作って、そっちにマージしていって
リリース時にmasterにマージを行う。

42 :
ただし大型新機能の開発が複数並行で進んでおり、両方が同じ部分を修正する
可能性が有る場合、大量のコンフリクトが起きる可能性があるので注意する必要がある。

これを避けるために新機能が完成するまで新機能の内容を"全て"マージしない
という考え方を変える必要がある。

多くの場合、新機能の開発の中には、既存バグの修正やリファクタリング
モデルや汎用ライブラリなどの機能追加(仕様変更ではなく)が含まれる。

これらは先にリリースしても問題ないはず。全てマージしないのではなく一部だけマージする。

だから新機能の開発を行っていたとしても、そのなかで先にリリースできるものはリリースしておく
(次期バージョンブランチがあるのならそっちにマージ。次期バージョンブランチと新機能ブランチは別ね)

こうすることでいち早く大型新機能開発はコンフリクトが起きかねない部分を知ることができるし、
相手の開発した部分を利用することも可能になるから、同じものをそれぞれで作ってしまう無駄も省ける

大型新機能開発を行っていたとしても、小さな開発とリリースという形に変更していくことは可能なんだよ。

43 :
自己レス

> それがコミットを意味がある単位で細かく分けろって話にもつながるんだよね。

この話につながっていなかったw

まあわかるとは思うけど、このように開発の順番とマージやリリースの順番を
自由に入れ替えるってことは、それぞれのコミットが意味のある単位で
細かくまとまってなきゃいけないんだよ。

無関係の修正が一つのコミットに混じっていたり、
関係あるコミットが複数に分かれていたりしたら
それを見つけるのが大変になる。

ちゃんとコミットが分かれていれば、開発した順番ではなく
望む形に入れ替えたりすることがしやすくなる。

44 :
コミットを細かくってのは、簡単なようでいざやると相当難しいんだよな
これがすっきりできれば後はどんなフローにも載せられるんだろうが…

45 :
一生バージョン管理やってろw

46 :
>>44
たしかにね。最初はちょっと難しかった。
コード修正中に関係ないことをついついやってしまうしw

そこは慣れだよ。意識してコミットを小さくするようにしていけばいい。
まず覚えるべきなのは、git add -pだね。
これができると一つのファイルの中の一部分だけコミットできる。

あとはコミットの順番は後から並び替えられるし、まとめることもできるので
順番は気にせずにほんとうに小さくコミットを作ること。
そして後からまとめて綺麗にしようと考えずに、常に片付けながら作業(開発)すること。
後からまとめてコミットを綺麗にしようと思って、そこで何したか忘れるんだよw

大きな開発を複数人でスムーズに行うには、共通のソースコードへの修正の
反映作業が重要だからね。大きな開発も小さく修正していくことで管理可能になる。

それを実際にやってるのを見れるのがgithubとかなんで(まともなプロジェクトの)
リポジトリを参考にするといいよ。

47 :
>>46
まともと思える物を紹介して
参考にしたい

48 :
>>47
だからgitだってw
gitを一番うまく使ってるのは
gitプロジェクトに決まってるでしょw

49 :
>>1 のスタンスで詳しく書かれた Git の書籍はないですか。
洋書でも構いません。

50 :
>>49
紛らわしいので言い直します。

>>1 の人のような考え方を詳しく解説した書籍はないでしょうか。
洋書でも構いません。

51 :
>>49
残念ながら知らない。日本の本に関しては、最近出た2,3冊は内容を確認してないけど、
それ以前のものに関してはgitの使い方ぐらいだったな。それはそれで最初のうちは
役に立つんだけど。海外の本に関しては、読んでないので知らない。


代わりに日本と海外(アメリカ)の考え方の違いの話をするよ。
よく言われていることだけど、海外はパッケージの導入を積極的に行うけど、
日本は独自で作ったりパッケージをカスタマイズすることを望む。

この考え方の違いというのは、日本は自分のやり方を通そうとするということ。
日本の文化だと、アプリにがあれもこれもなんでも出来るようになってしまう。
それは一見便利なように見えるけど、業務を改善(=変えていく)ことにはつながらない。
やり方を変えずにツールを変えるだけだから生産性は上がらない。

海外のソフトウェアっていうのは、業務を一番効率的にやれるのはどういうものか?
という考えを形にしたものなんだ。もちろんその考え方はいろいろあって正解とは限らないけど、
少なくともソフトウェアっていうのは、開発者が想定した正しい使い方っていうのがあるんだよ。

つまり俺の考え方というのは、ツールの正しい使い方というのを学習していくことでできたもの。
ツールにはできること、できないことってのがあるけれど、思いつくまま実装されたのではなく、
正しい使い方をするのに、必須だから追加した機能であり、邪魔だから追加しないと考える。

例えばgitには歴史を改ざんできる機能があるでしょ? これは正しく使うのに必須だから。
ファイルをロックして他人が編集できないようにする機能はないでしょ?
それは正しく使うのに邪魔だからあえて搭載しないことを選んでいる。

この開発者の考えに、自分の考えが適合してくると、「こんな機能があったほうがいいんじゃないか?」って
思ったものが次期バージョンに搭載されたり、議論が行われていたりする。

考え方が合わない最初のうちは、なんでこうなってるんだ?使いにくい!って思うかもしれないけど
そうではなく意味があってやってることだと考え、何故そうなっているかを考えていくといいよ。

52 :
>>49
もう一つgitよりの話をすると、gitは誰が何故作ったのかを考えればわかると思うよ。
リーナスがソフトウェアを開発するために作ったよね?

そう、開発者のものなんだ。
開発の進捗を知るためのマネージャーのツールでもないし
ソフトウェアのロストを怖がる管理者のツールでもない。

ソフトウェアの開発、しかもそれを多くの人が関係するってことは
正しい修正であるかどうかを判断するには、ソースコードを読まないといけない。

頭数を揃えてテストしたって、正しい修正であるかなんてわからない。
どっかの金もってる大会社じゃないんだから、頭数自体揃えられないけどw

そういう文化にとって「テスト」とは誰でも(一人でも)テストの実行を再現可能な
テストコードであり、そのテストコードが正しいかどうかは、読んで判断するもの。

それ以外できっこないんだから。これは現実。

そこまでわかれば、あとは何が必要かがわかる。必要なのはコードが読みやすい
コミットであり、必要なツールは読みやすいコミットを作ることが出来るもの
そういう考えでgitが必要とされ生み出された。あとはそのgitの正しい使い方を理解していくだけだよ。

ただ一つだけ俺がラッキーだったのは、gitを知る以前から、読みやすいコミットの重要性を理解していたことかな。
完成されたソースコードだけじゃなくて、修正の内容とその過程自体もわかりやすいことが重要であると。
だから俺にとっては、gitは俺が考えた理想を実現するツールだったね。

53 :
後からコミットログは簡単にまとめられて、逆に分割は困難なことを考えると
上書き保存するたびに即コミットぐらいでやるほうがいいのかなあ

54 :
休憩や今日の終わりの度にコミット?
動かないコミットは嫌だな

55 :
git って ID:2XvJk2DZ みたいな信者が沸くところが嫌なんだよね
理想に最も近いとか言うならまだわかるけど、理想を実現したとかちょっと気持ち悪い

56 :
>>53
それでもいいぐらいだよ。ただコミットを整理せずに
放置しておくと何したのか忘れるので整理しながら作業した方がいい。

分割は面倒だけど困難というわけでもない。
やり方は色々あるけど、rebase -iの途中で分割作業をするから
(つまりある作業中に別の作業をするようなもん)
少し慣れが必要だけどね。


>>54
masterに入れるのは動くコミットに決まってるでしょw
トピックブランチなどは最終的に消すものなのだからどうでもいい。

誰が作ったそのルール? コミットはどんなものでも
動くようにしろとか、変な自己ルールに縛られすぎだよw

理由があるからルールができる。理由を説明できないような
ルールを作らない方がいいね。

>>55
うん。それで?
なにか間違っているとか、もっといい案があるなら
どんどん言っていいんだよ?

57 :
>>56
ならあんたのルールをここで公開してくれよ
採用考えるわ

58 :
>>57
1からずーっと書いてきてる。
読みなおしてくれ。

59 :
>>58
ずーっとってお前の発言は識別出来んわ
コミットしてくれー
だとコミットの使い方が違うか

60 :
>>59

既に>>2で具体的に書いてるじゃないか?

61 :
>>59
「コミットを意味があるように綺麗にしておけ」とは言っているが
その中で「コミット」という単語しか見えないのか?

62 :
>>60
おいおい1からずっと書いてるから読めって
2がまとめかよ
しかもあれで具体的だなんて
ちゃんと仕事で複数人で活用してる人?
一人とか小さなものでやってるだけ?
なら、お前が書けと言われても作れていないから書けない、悪いがな

63 :
もしかして、このスレって
自称優秀なPG様が作っているスレ集の1つだったか?

64 :
長文自分語り
しかも中身はオレオレ規約
きめぇ

65 :
>>62

2がまとめじゃなくて、2が基本てな原則だよw
その後は>>2の補足をしたり、もっと具体的に踏み込んだ説明をしている。

あれで具体的って、お前やっぱり>>2しか見てないじゃないかw
だからちゃんと1から読めって言ってるんだが。

> ちゃんと仕事で複数人で活用してる人?
当たり前だろw 逆に一人でやるなら適当にやればいいだろ。

自分の書いたコードだったらコミットが汚くてもわかるんだよ。
でも他人の書いたコードのコミットが汚かったらわからないだろ?

レビューしてくださいって来たコードが、何百行もある大作1コミットだったら
レビューなんてできるわけないし、小さく分かれていても複数のコミットで
同じ行を修正していたりしたら、無駄なレビューをすることになる。

レビューするためには、ソースコードを綺麗にするだけじゃなく
コミットの内容も綺麗である必要がある

俺の話は複数人だからこそ必要な話をしてるんだが。
多くの人、それぞれスキルは違うし、悪意がある人迄いる可能性がある
オープンソースを見てみなさいよ。
適当なコミットはレビューできないから、そういうのはマージされないよ。

知った人間ばかりの会社内のやり方とはわけが違う。
会社内だとコードのが意味不明でも上司だからとか、あの人なら大丈夫だからとか
よくわからないけど、動いてるみたいだからいいんじゃね?
コミットが汚くてもろくにレビューもせずに適当マージしてるでしょ?

俺の意見は最初から一貫して、レビューが可能なように綺麗なコミットにしろって話をしてる。

66 :
>>65
59へ戻る

67 :
>>64
それで?

そんなものよりもっといい案が有るなら
それを言ってくれよ。

自分の意見を言わない奴に
発言する権利はないよ。
ミーティングと一緒。

ミーティングで誰かの意見に対して
「あなたの提案の内容に関してですが、
あなたの発言がキモいです。」
とか言ったら嘲笑w

68 :
>>66
どうぞ戻ってくださいw

はい、つぎ。

69 :
gitのコマンドはわかるんだけど
gitをどのように使っていけばいいか悩んでいる人
相談に乗りますよー。

70 :
やっぱりよく見るパターンだったな
自分語りのために無駄スレ作ってないで
ちゃんと会社の人とルール共有しろよ

71 :
>>70
会社に人と共有しているルールというか
考え方を書いているだけですが?

それであなたの考え方は?
それがないとあんたはただの荒らしでしかないよ。

72 :
話し合いにも討論にも雑談にさえならないのは目に見えてるから遠慮しとく

73 :
そういやうちの会社にはいないけど、
よく聞くじゃん?

上の立場の人が、でてきた意見を何の理由もなく否定する人。

きっと自分の考えを書かずに否定する人って
上の立場になったら、そういう人になるんだろうなって思った。

ドラマや小説で悪役として描かれる
そういう上司。

74 :
>>72
バイバイw

俺にしてみれば、お前をあぼーんしたのと同じだから
それがお互いにいい結果。

意見がないならもう来ないでね。
意見があるのなら来ていいですよ〜w

75 :
>>67
すごく良い発言があるよ

「あなたの提案の内容に関してですが、
あなたの発言がキモいです。」
とか言ったら嘲笑w

だよなー
でも今は、「あなたの発言に関してですが、発言内容以前にあなたそのものがキモイです」
だな

76 :
>>75

> でも今は、「あなたの発言に関してですが、発言内容以前にあなたそのものがキモイです」

わろたw

2ちゃんねるだからいいとして、
そんなの会社でやったら即刻クビだろw

ホントこいつ発現する意味ないわーw

77 :
>>74
おまえだれ?
少し前に指摘したことさえ忘れたの?

78 :
少し前に指摘した人だってことをわかってるのに、
誰って聞いてるのはなんなんだろうなw

そんなのどうでもいいだろう?
ここにはgitに関する意見を書けよ。

79 :
>>54
>動かないコミット

開発ブランチは分けろω

80 :
>>79
こまめなコミットって意見あったけら言ったんだが
開発ブランチなら、動かないコミットも許す?
開発ブランチは個人ごと?ローカルコミットだから人に迷惑はかけない?
マージしたら凄いゴミコミットの山では?
など疑問は多い

81 :
>>80
少しは考えたほうがいいよ。

なぜブランチはあるのか?
なぜ動く必要があるのか?
開発ブランチは個人ごとである必要があるかないか
何をしたら人に迷惑で何が迷惑でないか

疑問があるのなら、他の人はどうやっているかを考えればいい。
世の中にサンプルはいくらでもある。
前にも答えたけどgit自体のリポジトリを見るとか。

有名プロジェクトであれば、そこがやっているやり方には
何かしらの理由がある。

疑問が多いってことは、その疑問に対して
自分で何も考えてない証拠だよ

82 :
>>81
お前は黙っててくれるかな

83 :
>>82
いやです♪

84 :
ちなみに>>80の疑問に関して言えば
俺は既に答えが出てる。

85 :
d62hq9+6はどうやら俺にレスして欲しくないようだし、
他の人の意見も聞きたいから>>80に答えるのは
明日ぐらいにしようかな。IDが変わってからw

86 :
>>34
githubの画面からはよく分からなかったから、ようやくcloneしたけど、mergeコミットと単なるコミットってどういう意味で呼び分けてるの?

87 :
> mergeコミットと単なるコミットってどういう意味で呼び分けてるの?
呼び分けるも何も、

マージコミットと単なるコミットは別物だけど?

https://git-scm.com/book/ja/v1/Git-%E3%81%AE%E3%83%96%E3%83%A9%E3%83%B3%E3%83%81%E6%A9%9F%E8%83%BD-%E3%83%96%E3%83%A9%E3%83%B3%E3%83%81%E3%81%A8%E3%83%9E%E3%83%BC%E3%82%B8%E3%81%AE%E5%9F%BA%E6%9C%AC
> 単にブランチのポインタを先に進めるのではなく、Git はこの三方向のマージ結果から
> 新たなスナップショットを作成し、それを指す新しいコミットを自動作成します (図 3-17 を参照ください)。
> これはマージコミットと呼ばれ、複数の親を持つ特別なコミットとなります。

88 :
>>86
明らかに違うものとしてgitで管理されていることを示すために

http://te2u.hatenablog.jp/entry/2015/03/24/233447
> この状態でrebaseを行うときに-iオプションだけでは
> マージコミットは含まれない。マージコミットがあるときは
> -pオプションをつけて実行すると
> 指定した範囲のマージコミットが含まれる。


このように、rebase -iコマンドには
マージコミットという特別なコミットを
含めるか含めないかのオプションが有る

89 :
>>30で単なるコミットではなくマージコミットを見ろって言ってるじゃん。
普通の使い方なら、そもそもマージコミットで個別の修正はあり得ないよね?
単なるコミット同士をマージしたものなんだから。

90 :
>>89
あぁ、その話か。

マージコミットには、どのコミットとどのコミットを
マージしたのかって情報が含まれるんだよ。

「単なるコミット同士をマージしたもの」という言い方が、
何か意味を勘違いしている気がするが、コミットには歴史の情報も含まれている。
(つまりAとBコミット番号が同じなら、過去も同じであるということ)

つまり、masterにbranch(のHEADのコミット)をマージするってことは、
マージコミットの中にはbranchの複数のコミット情報が含まれてることを意味する

>>30で言ってる「マージコミットの中」というのは、
マージコミットでマージしたブランチの複数のコミットを見ろって話。
それはブランチのコミット内容を意味する。

人によってはmasterに直接コミットを追加することもあって
マージコミットを使ってないコミットにはtypo修正とかあり得る。
(typo修正だけのブランチをffマージするのと同じ)
だからこのコミットを見てもブランチが綺麗に整理されてマージしているってことに気がつかない。

マージコミットの中の複数のコミットを見ることで、ブランチに含まれる
コミットは綺麗に整理してからマージされているってことがわかるって話。

91 :
やっぱり、マージコミットにはマージしたブランチの複数のコミットが含まれる、っていい方が分からんな。
githubは確かにそう見えるが、実際にはマージコミットは二つの親コミットをもつコミットだろう?
githubはpull request形式だから、マージ先ブランチとマージ元ブランチを明確に区別出来て、マージコミットをマージ元ブランチの複数のコミット、という意味に出来るのかな?

92 :
まあ、要するに、単なるコミットっていうのは、githubのmasterブランチ上で表示されるマージコミットでないコミットってことね。

93 :
>>91
今masterブランチの話をしてるんだよ?

マージ先ブランチはmasterで
マージ元ブランチはmasterから枝分かれした
ブランチであることは明らかでしょう?

master

A
│\ branchA
↓ ↓
B  a
↓ ↓
C  b
↓ ↓
D  c
│/




★のマージコミットには、Dとcのコミットが記録されているだけだが、
cはbからの修正、bはaからの修正、aはAから枝分かれしたものって
ことははっきりわかるんだから、★はmasterにbranchAを
マージした結果できたものであると考えるのは自然でしょう?

多分君がわかってないのは、★にはDとcというコミットが記録されているが、
それだけだ。cの前がbであるかどうかはわからないし、いつ枝分かれしたかも
わからないって考えてるんじゃない? そういうことはありえないよ。

94 :
ブランチ AのHEADがコミットcで、masterのHEADがコミットDのときに、ブランチAにmasterをマージする。マージコミット☆が出来る。
そのあと、masterがブランチAをマージすると、ffになってmasterのHEADが☆になる。

さて、このときマージコミットに含まれるコミットはa,b,cなのか?それともB,C,Dなのか?

95 :
ffになったらマージコミットはないよ?

確実にマージコミットを作りたいなら

(通常masterへのマージではマージコミットを作る。
なぜならマージしたという情報を残すため)

--no-ffオプションを付ける

96 :
masterのHEADの☆はマージコミットだよ

97 :
>>95
+1

98 :
>>96
言ったでしょう?

masterへのマージでは通常
--no-ffをつけるって。

だから>>94のような状態には通常ならないんだよ。

99 :
相変わらずウルセーバカがいるな

100 :
運用ガイドラインの一つとして、masterへのマージは原則として
--no-ffをつけるってのも必要かな。


100〜のスレッドの続きを読む
次世代言語12 Go Rust Swift Kotlin TypeScript
Pythonについて(アンチ専用)
Kinect ハック 2台目
ふらっと C#,C♯,C#(初心者用) Part147
ほぼ初心者プログラマでするべき事がわからない
いもうとデスクトップを実際に作ってみないか?3
PHPがいかに駄目言語であるかをちゃんと説明 Part.2
プログラミング言語 Scala 11冊目
【MACRO】Google Apps Script 質問スレ【DRIVE】
Excel VBA 質問スレ Part66
--------------------
ヤマトクロニクル覚醒晒しスレpart71
【バーチャル】hololiveアンチスレ#6714【youtuber】
【ゆうちゃろ】ペカるTV 7千円目【もうちゃん】
【アコギ】弾き語りをうpするスレ【Part13】
(*゚0゚;;)を飼いたいんですが…7’
【ブラックセブン】近所のセブンイレブン、闇しか感じない。無念だったでしょうね。心よりご冥福をお祈りします。★4
【ニッポン】amiinA
WOWOWライブ462
【糞サヨクざまあ】旭日旗問題でまた嫌韓が増えそうだなwww【朝鮮人ざまあ】
西明日香 その53
Lamp 7
【悲報】 原油 マイナス40ドル [399259198]
【築地はるき】世界の屁こき隊【豊洲】
ファイターズボーイ
1974年(昭和49年)度生れの毒男だよ全員集合253人目
【鎌倉】スワニーについて語りましょう【元町】
【ウイイレ】Winning Eleven2018 part29【アプリ】
■   小栗旬って一般人以下の不細工だよね  ■
【刀ステ】刀剣乱舞2.5次元愚痴スレ4【刀ミュ】
Hackintosh初心者スレッド Part2
TOP カテ一覧 スレ一覧 100〜終まで 2ch元 削除依頼