SlideShare a Scribd company logo
1 of 21
れれれのGitおぢさん
W8LT#6
やーんやんやん
• 松田 淳平 (だるま,デブ,酒クズ)
• 東工大 佐伯研M2
• Java, Kotlin,シェル芸
• twitter:@red_fat_daruma, github:jmatsu
git rerere
を知っていますか?
Git rerere
• Reuse recorded resolution of conflicted
merges が由来
• 以前発生したconflictと同じものが発生し,解
消するケースは存在する
• でも毎回同じことをするのは面倒くさい
• そこで開発者が手で行ったconflict解消を覚え,
auto merging時に支援してくれるのがこれ
Git rerere
• デフォルトでは無効
• git config rerere.enabled true により有効化
• mergeやrebase時に動いてくれる
• rerereはコマンドというより「機構」
• いくつかのサブコマンドを呼び出すことで,明
示的に各種機能を使える
そもそも
同じconflictなんて発生する?
あるあるケース
1. ローカルのdevelopブランチで開発
develop(local)
あるあるケース
1. ローカルのdevelopブランチで開発
2. topicブランチを引っ張ってくる
develop(local)
topic(remote)
あるあるケース
1. ローカルのdevelopブランチで開発
2. topicブランチを引っ張ってくる
3. 突然のconflict!!!
4. 手で頑張って修正,コミット
M
develop(local)
topic(remote)
Rerere recorded
あるあるケース
1. ローカルのdevelopブランチで開発
2. topicブランチを引っ張ってくる
3. 突然のconflict!!!
4. 手で頑張って修正,コミット
5. 作業を続ける
M
develop(local)
topic(remote)
このケースで存在する問題
• マージコミットがそこにあるべきかどうか
M
develop(local)
topic(remote)
このケースで存在する問題
• マージコミットがそこにあるべきかどうか
• developブランチにおける編集が終わってから,マージ
コミットが存在する方が良い
• そのマージコミットは開発者がpull(あるいはmerge)を
打った副作用であって,本質的なものでなかったりする
M
develop(local)
topic(remote)
このケースで存在する問題
• マージコミットがそこにあるべきかどうか
• ないほうが良いとしたら;
• Git resetによりマージコミットを消し,作業を続行
• 再度developをマージする際に「同じconflict」が発生
M
develop(local)
topic(remote)
Rerere merges
with using thhe record
問題点
Rerereは万能ではない
• 本当に同じ解決策を取れる場合に限る
• (例えば)機械学習による云々ではないため
• 作業を続行した際,同じファイルへの編集の場
合は支援してくれないケースが多い(hunk計算
の関係)
• .git/rr_cacheにどんどんキャッシュしていくの
で.gitが肥大化する可能性はある
Rerereは万能ではない
• 「とりあえずマージ」はそもそも良くない
• Conflictは事前にチェックすることが可能
• Patchの作成 → Patchの適用が可能かチェック
• git format-patch “${current_branch}..${source_branch}” --
stdout > “${temporary_file}”
• [ -s “${temporary_file}” ] && git apply “${temporary_file}” -
-check
• Rerereが適用できるケースが大半!・・・というわけ
じゃない
• あくまでも冗長な作業を改善する限定的な機構であって,
汎用的なケースに対する支援を行うものではない
まとめ
Git rerereっていう
便利なものがあるよ
でも頼り過ぎは良くないよ
ここぞ,というときだけ
使うべきだよ
正直使ってないよ
(終わり)

More Related Content

What's hot

Apache CloudStack コントリビューション
Apache CloudStack コントリビューションApache CloudStack コントリビューション
Apache CloudStack コントリビューション
Satoshi KOBAYASHI
 

What's hot (20)

Rancherで作る お手軽コンテナ運用環境!! ~ Kubenetes牧場でコンテナ牛を飼おう!~
Rancherで作る お手軽コンテナ運用環境!! ~ Kubenetes牧場でコンテナ牛を飼おう!~Rancherで作る お手軽コンテナ運用環境!! ~ Kubenetes牧場でコンテナ牛を飼おう!~
Rancherで作る お手軽コンテナ運用環境!! ~ Kubenetes牧場でコンテナ牛を飼おう!~
 
マジカルsvnとキュアgit
マジカルsvnとキュアgitマジカルsvnとキュアgit
マジカルsvnとキュアgit
 
Git flowについてまとめてみた
Git flowについてまとめてみたGit flowについてまとめてみた
Git flowについてまとめてみた
 
いつやるの?Git入門 v1.1.0
いつやるの?Git入門 v1.1.0いつやるの?Git入門 v1.1.0
いつやるの?Git入門 v1.1.0
 
RancherがみつめるAWX 〜お前のコンテナ、息してるの?〜
RancherがみつめるAWX 〜お前のコンテナ、息してるの?〜RancherがみつめるAWX 〜お前のコンテナ、息してるの?〜
RancherがみつめるAWX 〜お前のコンテナ、息してるの?〜
 
(自分流)Gitの運用ルール
(自分流)Gitの運用ルール(自分流)Gitの運用ルール
(自分流)Gitの運用ルール
 
OSS開発者を増やしたい!
OSS開発者を増やしたい!OSS開発者を増やしたい!
OSS開発者を増やしたい!
 
はじめてのGit forデザイナー&コーダー
はじめてのGit forデザイナー&コーダーはじめてのGit forデザイナー&コーダー
はじめてのGit forデザイナー&コーダー
 
Git & GitHub & kintone でウルトラハッピー!
Git & GitHub & kintone でウルトラハッピー!Git & GitHub & kintone でウルトラハッピー!
Git & GitHub & kintone でウルトラハッピー!
 
デザイナのためのGit入門
デザイナのためのGit入門デザイナのためのGit入門
デザイナのためのGit入門
 
Git tutorial
Git tutorialGit tutorial
Git tutorial
 
Apache CloudStack コントリビューション
Apache CloudStack コントリビューションApache CloudStack コントリビューション
Apache CloudStack コントリビューション
 
Metahub for github
Metahub for githubMetahub for github
Metahub for github
 
はじめようGit
はじめようGitはじめようGit
はじめようGit
 
gitを使って、レポジトリの一部抽出forkしてみました
gitを使って、レポジトリの一部抽出forkしてみましたgitを使って、レポジトリの一部抽出forkしてみました
gitを使って、レポジトリの一部抽出forkしてみました
 
Go+revel
Go+revelGo+revel
Go+revel
 
バージョン管理システム比較資料
バージョン管理システム比較資料バージョン管理システム比較資料
バージョン管理システム比較資料
 
jenkinsで遊ぶ
jenkinsで遊ぶjenkinsで遊ぶ
jenkinsで遊ぶ
 
WordPressサイトのバージョン管理
WordPressサイトのバージョン管理WordPressサイトのバージョン管理
WordPressサイトのバージョン管理
 
バイオシェル芸 問題のみ
バイオシェル芸 問題のみバイオシェル芸 問題のみ
バイオシェル芸 問題のみ
 

Similar to れれれのGitおぢさん - git rerere #w8lt

Gitと出会って人生変わった テックヒルズ2013-03-22
Gitと出会って人生変わった テックヒルズ2013-03-22Gitと出会って人生変わった テックヒルズ2013-03-22
Gitと出会って人生変わった テックヒルズ2013-03-22
Shota Umeda
 

Similar to れれれのGitおぢさん - git rerere #w8lt (10)

GFLS入門 - GitFlowっぽいアレ-
GFLS入門 - GitFlowっぽいアレ- GFLS入門 - GitFlowっぽいアレ-
GFLS入門 - GitFlowっぽいアレ-
 
僕の考えた最強の開発環境(笑)
僕の考えた最強の開発環境(笑)僕の考えた最強の開発環境(笑)
僕の考えた最強の開発環境(笑)
 
C#メタプログラミング概略 in 2021
C#メタプログラミング概略 in 2021C#メタプログラミング概略 in 2021
C#メタプログラミング概略 in 2021
 
今さら聞けない人のためのGitLabの始め方 Ubuntu編
今さら聞けない人のためのGitLabの始め方 Ubuntu編今さら聞けない人のためのGitLabの始め方 Ubuntu編
今さら聞けない人のためのGitLabの始め方 Ubuntu編
 
ライブマイグレーション実装で体験したデバッグの解説
ライブマイグレーション実装で体験したデバッグの解説ライブマイグレーション実装で体験したデバッグの解説
ライブマイグレーション実装で体験したデバッグの解説
 
社内勉強会用Gitのスライド#02
社内勉強会用Gitのスライド#02社内勉強会用Gitのスライド#02
社内勉強会用Gitのスライド#02
 
入門 シェル実装
入門 シェル実装入門 シェル実装
入門 シェル実装
 
Gitと出会って人生変わった テックヒルズ2013-03-22
Gitと出会って人生変わった テックヒルズ2013-03-22Gitと出会って人生変わった テックヒルズ2013-03-22
Gitと出会って人生変わった テックヒルズ2013-03-22
 
デザイナのためのGit講座
デザイナのためのGit講座デザイナのためのGit講座
デザイナのためのGit講座
 
"Continuous Publication" with Python: Another Approach
"Continuous Publication" with Python: Another Approach"Continuous Publication" with Python: Another Approach
"Continuous Publication" with Python: Another Approach
 

More from Junpei Matsuda (7)

Spring + Gradle + Kotlin W8LT#5
Spring + Gradle + Kotlin W8LT#5Spring + Gradle + Kotlin W8LT#5
Spring + Gradle + Kotlin W8LT#5
 
Try to Write A Better Commit Message
Try to Write A Better Commit MessageTry to Write A Better Commit Message
Try to Write A Better Commit Message
 
Bashで競技プログラミング #w8lt #w8lt4
Bashで競技プログラミング #w8lt #w8lt4Bashで競技プログラミング #w8lt #w8lt4
Bashで競技プログラミング #w8lt #w8lt4
 
シェルスクリプトでQOLを上げる話
シェルスクリプトでQOLを上げる話シェルスクリプトでQOLを上げる話
シェルスクリプトでQOLを上げる話
 
Kotlinで快適Android開発 #W8lt
Kotlinで快適Android開発 #W8ltKotlinで快適Android開発 #W8lt
Kotlinで快適Android開発 #W8lt
 
Application Developer Festival 2015 LT
Application Developer Festival 2015 LTApplication Developer Festival 2015 LT
Application Developer Festival 2015 LT
 
PRML2.3.8~2.5 Slides in charge
PRML2.3.8~2.5 Slides in chargePRML2.3.8~2.5 Slides in charge
PRML2.3.8~2.5 Slides in charge
 

れれれのGitおぢさん - git rerere #w8lt