Bye Bye Moore

PoCソルジャーな零細事業主が作業メモを残すブログ

Git

git checkout はファイルだけ引っ張ってくる事もできる

Git

git checkout はファイルだけ引っ張ってくる事もできます 実際のところ 例えば、環境再構築でふっ飛ばしてしまったビルドに必要なファイルを安全なコミットxxxxから回収するスクリプトは以下の通り $ git checkout xxxx PATH/TO/FILE

git cloneするとき、最新の部分だけもらってくる

Git

案外知られていないようなのでメモ。Gitリポジトリから、最新のコミット結果だけ欲しい場合、 以下のようにやればOKです。 $ git clone --depth 1 hogehoge帯域が狭い場合など、少しでも高速化したい場合何かにはオススメです。

Gitでコミット数を知るワンライナー

Gitでコミットした量を知るワンライナーです。 git logは各種ログがでてきますが、awkでこれの”Date”分を抽出し、"uniq -c"で出てきた個数を数えると……コミット回数をリストアップできます。 $ git log | awk '/Date/{print " : " $4 " " $3 " " $6}' | uniq…

fileter-branchで誤ってaddしてしまったファイルを「最初から追跡していなかったことにする」

Git

fileter-branchはgitリポジトリにて誤ってaddしてしまったファイルを「最初から追跡していなかったことにする」大技です 相当に過激な技なので使い所を誤ると酷い目にあう危険性大です 実際のところ $ git filter-branch --tree-filter 'rm -f passwords.txt…

git blameで何処の誰が何時変更したか知る

Git

git blameは、どこの誰が、いつそのコミットをイジったか知るためのコマンドです。 git logを延々と追跡するより経済的である事もあります。 実際のところ そのまま 各行毎に、その行をイジった最新の人物と時間、コミットIDが表示されます。 $ git blame fi…

Git diffで特定の日付からの変更を確認したい場合

Git

Git diffで特定の日付からの変更を確認したい場合、以下の記法をつかえばいけます。 実際のところ $ git diff HEAD 'HEAD@{6 month ago}'他にも、特定の日付、時間で検索することも可能です。 $ git diff HEAD 'HEAD@{2015-06-01}' // 同じ意味 $ git diff H…

GitのコミットID(?)が長くてやってられない場合、"--abbrev-commit"をつけると短くできる

Git

GitのコミットID(?)が長くてやってられない場合、"--abbrev-commit"をつけると短くできます。 実際のところ $ git log --abbrev-commit --pretty=oneline ca82a6d changed the version number 085bb3b removed unnecessary test code a11bef0 first commit普…

Git diffで特定のコミットから変更されたファイルをマージ、削除といった情報込みで見たい場合"--name-status"でイケる

Git

とある地点からdiffをとると、死ぬほど量があって見るのも大変だったりします。 あるいは、単に変更されたファイル名だけ知りたい場合とか。 そんな時に重宝するのが、”--name-status”オプションです。 実際のところ $ git diff —name-status #{COMMIT_ID}M …

Gitで管理したディレクトリをアーカイブ化する

Git

Gitで管理したディレクトリをアーカイブ化する方法です。 一旦成果物を出さないといけない場合なんかは、これで楽ができます。 実際のところ RailsプロジェクトのHEADをアーカイブする場合を考えます。まず、"/.gitattriubte"にて、除外したいファイル・ディ…

Gitの用語がよく分からない時はgitglossaryを参照してみる

Git

gitglossaryはGitユーザマニュアルの一部で、Gitの用語を解説する資料です。Branchとは、HEADとは、Parentとは、と曖昧なまま使い続けかねない用語について 公式の言葉で親切丁寧に解説してくれています。また、中には公式で活用しているものと思われるジャ…

Git-tagを日付指定して打つ

Git

Git-tagは日付指定して打つ事もできます。 用法としては Git以外*1で管理されていたプロジェクトをインポートしたがtagが必要になった エラー対応で「ここまでは動いている」事が明確な場所についてtagをうつ といった用法が考えられます。 実際のところ 特…

git-tagにコメントをつける

Git

git-tagにはコメントをつける事ができます。ルール上、バージョン名でタグつけないといけないけど後で何やってるか確認したいという時は割りかし便利です。 $ git tag -m "update front views" v2.0.0 参考もと man git-tag

git-cherry-pickというコマンドについて

Git

git cherry pickは別ブランチの差分を摘んで頂くコマンドです 実際のところ $ git cherry-pick v2.6.14..private2.6.14これは、以下のコマンドに相当します。 $ git format-patch -k -m --stdout v2.6.14..private2.6.14 | git am -3 -k 以下、増強中 参考も…

git format-patchで外に出す用のパッチを生成する

Git

git format-patchは外に出す用のパッチを生成するコマンドです。 過去N回分のパッチをつくる "-3"オプションをつけると最新三個分のパッチを吐き出します。 末尾にファイル名なりディレクトリ名なりを入れれば、 その範囲が更新された範囲が更新されたものだ…

git-grepはブランチやタグ、コミットIDを指定できる

Git

以前、Git-grepについては取り上げましたが……shuzo-kino.hateblo.jp最後のトコにブランチやタグ、コミットIDをつけると、その範囲だけgrepしてくれるという便利機能も備えています 実際のところ タグ $ git grep "foga" "tagtest" tagtest:sample.txt:foga …

git-ls-remoteで他の場所にあるgitリポジトリのタグやブランチをみる

Git

git-ls-remoteを使うと、clone先にリポジトリにあるブランチやtagを確認できます。 実際のところ とにかく全部の情報を欲しい時はオプションなし $git ls-remote -t https://github.com/rails/rails.gitただし、閉じたプルリクやら何やら色々入ってくるので…

Git logで過去3日、あるいは指定日以降のコミットをみる

Git

$ git log --since='3 days ago'since以外にも、それ以前のコミットをみるuntilなんてのもあります。 --since=, --after= Show commits more recent than a specific date. --until=, --before= Show commits older than a specific date. なお、ここでのdat…

git diffと色々なオプション

Git

git diffは差分を出すコマンドです。 実際のところ 特定のファイルについて特定コミットからの差分を得る $ git diff a37f... sample.txt diff --git a/sample.txt b/sample.txt index 76e579a... 100644 --- a/sample.txt +++ b/sample.txt @@ -1,2 +1,2 @@…

Git tagを使おう

Git

Gitのtagは、その名の通り最新のコミットについてタグ付けする機能です。 あるポイントから 実際のところ タグ付け そのまんまです。 2バイト文字も使えるっぽいですが、なるだけ英数字のほうがいいでしょう $ git tag "tagtest" tag以前のコミットをみる gi…

giteverydayで「公式が考える」Git利用者の典型的作業をみてみる

Git

giteverydayはgitを導入するとついてくる「使い方事例」みたいなものです。 変な入れ方をしていなければ、manマニュアルに登録されているので man giteverydayで実行できます。中身はmanを事例を挙げて掘り下げたような感じです。 シナリオとして 個人開発者…

GithubのWikiページにローカルから更新を加える

考えてみれば当たり前なのですが…GithubのWikiページもローカルから更新をかける事ができます。流れは通常のGit cloneと変わりません。 $ git clone https://github.com/YOUR_USERNAME/YOUR_REPOSITORY.wiki.gitリポジトリにアクセス権限があるユーザアカウ…

git diffをpatchで扱える形式にする

Git

Git diff もpatchコマンドで扱う形式に変換できます。通常のgit diffと併せて、"–no-prefix"のオプションを使います。 このオプションは ”--no-prefix” Do not show any source or destination prefix. とあるように、ファイル名のような情報を表示しないオ…

git-stashの内容を確認する

Git

素のgit-stash-showならば git stash show spec/hoge.feature | 3 ++- spec/fuga.feature | 12 ++---------- spec/steps/page_steps.rb | 4 ++-- 3 files changed, 6 insertions(+), 13 deletions(-)と差分を見る事ができます。 pオプションをつけると $ git…

空コミットを作るにはgit commit --allow-empty

Git

$ git commit --allow-emptyとやると、空のコミットをつくる事が出来ます。 新しいブランチ切ってとりあえず何かやりたい場合は使えます。ためしにgit log -pして内容を確認すると... $ git log -p commit b098c4b607c58be6b0d0fd42a0732e1d6e39b9e2 Author:…

指定日以前の不要ブランチをまとめて消す

前回の続きっぽい記事です。手当たり次第ブランチを切りまくっていると、問題になってくるのが不要ブランチの処分。 実験用のお砂場として弄り回した果てに存在すら忘れていたのがチラホラ... 以前も似たような事をやりましたが、あのバージョンだと日付以降…

ブランチ一覧を更新時刻つきで表示したい場合、gitのfor-each-refが使える。

Git

ブランチの一覧を更新時刻つきで表示したい場合、gitのfor-each-refが使えます。 sortオプションに更新時刻を指定することで時系列に並べる事ができます。 また、--formatオプションと各種keyの組み合わせにより自由な表示が可能です。 実例 remote/originの…

PS1へ現在いるブランチを表示させる

brewでgitを導入した場合、以下のディレクトリに存在しています。 $ ls /usr/local/Cellar/git/2.0.0/etc/bash_completion.d/git-completion.bash とgit-prompt.shがあります。 今回つかうのは後者です $ cp /usr/local/Cellar/git/2.0.0/etc/bash_completio…

Go getのためには、各種バージョン管理ツールが必要

とあるパッケージを入れようとした所、エラーがでました。 $ go get github.com/kr/godep go: missing Mercurial command. See http://golang.org/s/gogetcmd package github.com/kr/godep imports code.google.com/p/go.tools/go/vcs: exec: "hg": executab…

Gitで特定ファイルの変更履歴をみる

Git

"git log -p"は変更履歴つきで編集ログを見せてくれるコマンドです。 これに具体的なファイル名を指定してあげれば、特定ファイルのみの変更履歴を確認することができます。 $ git log -p app/view/hoge/show.html.erbとやれば commit xxxxxxxxxxxxxxxxxxxxx…

git管理下のディレクトリにあるRubyスクリプトの総行数を調べる

まず、git ls-filesというコマンドを使うとファイル名一覧を出す事が出来ます。 $ git ls-files .gitignore .magnum.yml .rspec Gemfile README.rdoc Rakefile app/assets/images/.keep app/assets/javascripts/application.js app/assets/javascripts/boots…