バージョン管理ツール。
Linux のバージョン管理のために作成された。
→?, →?, →?
参考:
追記: 2017-11-02
ひょっとすると、2016-01-25 時点で既にそうだったのかそれ以降そうなったかが不明だが、デフォルトだと working tree 内のファイルはシンボリックリンク作るようになってるらしく、--no-simlinks オプション付けないと Cygwin から WinMerge 呼ぶ場合、上手く diff 取れない。
Linux のバージョン管理のために作成された。
- Pro Git (ja)
- Git入門
- git: Linux Kernelのためのバージョン管理システム(VCS)
-
Git を使ってソース・コードを管理する - IBM developerWorks
- 2006-07-06: Git を使ってソース・コードを管理する
- 2009-08-25: 分散型の Web 開発の様相を変える Git
- git cheat sheet
- tech.kayac.com / Advent Calendar 2012 / 2012-12-12: #12 チームでgitを使い始めてよかった!
- slideshare / [こわくない Git>[http://www.slideshare.net/kotas/git-15276118]]
- backlog / サルでもわかるGit入門
- SourceForge.jp / Gitによるソフトウェア開発をはじめよう
- 結城浩 / Gitの基礎練習
- transitive.info / Git 使い方 見出し一覧
- コンセプトから理解するGitコマンド
- github-cheat-sheetが便利
- 図解 Git
- 技術の犬小屋 / 2014-09-05: Gitでコミットメッセージを記述する際のルール
- nobuyo.github.io / 2016-01-11: Gitでpush時のプロトコル変更
- Qiita
- SatohJohn / 2016-01-30: windowsのgit-credentialでユーザ名パスワード入力を簡略化する
- sonots / 2015-02-01: インデントコミットで真犯人がわからなくなった場合の git blame
- Google: Git flow
- Google: GitHub flow
- DevelopersIO / 2017-12-05: git-crypt を使って秘密情報を版管理する, ネタ元: twitter: 1158566130920783872
- Keybase.io / 2017-10-04: Keybase launches encrypted git, ネタ元: twitter: 1158573911899926528
→?, →?, →?
ネタ元:
- Write yourself a Git!
- Hacker News / Write yourself a Git(2018)
- GitHub / danistefanovic / build-your-own-x # build-your-own-git
git filter-branch 使うと commit 時の email とか時刻の書き換えが出来る(ただしリビジョン値が変わってしまう)。
参考:
参考:
- github:help / Advanced Git /Changing author info
「blob ファイルサイズ\0ファイルの内容」の sha1sum を取れば良いらしい。
例えば hoge と言うファイルが git に登録された際の SHA1 値は以下のようにして求めることが出来る。
例えば hoge と言うファイルが git に登録された際の SHA1 値は以下のようにして求めることが出来る。
@(){ unset -f $FUNCNAME;(echo -en "blob $(stat -c%s "$1")\0";cat "$1")|sha1sum|cut -d" " -f1;};@ hoge参考:
- Pro Git / 9.2 Gitの内側 - Gitオブジェクト / オブジェクトストレージ
基本的に .git 以下を公開すれば良いらしく、通常は --bare 付けて作業ファイルなしで .git のみの状態にしておくらしい。
ただし HTTP 経由での取得に必要なファイルを更新しとく必要があるらしいので、以下のサブコマンドを実行しておく必要があるらしい。
参考:
ただし HTTP 経由での取得に必要なファイルを更新しとく必要があるらしいので、以下のサブコマンドを実行しておく必要があるらしい。
git update-server-info手動でやるのは面倒なので、通常は hooks/post-update 使って自動で上記のサブコマンドを実行するようにしておくと良いらしい。
参考:
- git / Documentation / Book / 1st Edition / 4.5 Git サーバー - 一般公開
- サンプルコードによるPerl入門 〜 安定と信頼のPerlを学ぼう 〜 / 2011-11-04: Gitの公開リポジトリと個人リポジトリの更新と公開のやり方 / Gitメモ
commit 時に --date オプションで author date を指定出来る。
commit date は rebase 時に --committer-date-is-author-date を指定すると、author date に揃える事が出来る。
参考:
commit date は rebase 時に --committer-date-is-author-date を指定すると、author date に揃える事が出来る。
参考:
- ひだまりソケットは壊れない / 2013-02-01: Git のコミットのタイムスタンプには author date と committer date の 2 種類があるという話
git difftool -d -x winmerge.shのようにすると dirdiff になるので便利らしい。
参考:
- てっく煮ブログ / 2013-07-22: git difftool --dir-diff が便利すぎて泣きそうです
- Qiita / jtanaka / 2014-02-04: WindowsにGitをインストールした後にやっておくべき設定
追記: 2017-11-02
ひょっとすると、2016-01-25 時点で既にそうだったのかそれ以降そうなったかが不明だが、デフォルトだと working tree 内のファイルはシンボリックリンク作るようになってるらしく、--no-simlinks オプション付けないと Cygwin から WinMerge 呼ぶ場合、上手く diff 取れない。
$ git difftool -d --no-symlinks -x winmerge.sh
以下のコマンドラインが一番詳細かな?
git log --all --graph --color --pretty=fuller --decorate=full
commit と index と working tree の比較は以下のようになる。
左右入れ替えたいときは -R オプション。
--staged は --cached と同義。
参考:
command | left | right |
---|---|---|
git diff | index | working tree |
git diff --cached | HEAD | index |
git diff HEAD | HEAD | working tree |
git diff --cached HEAD~ | HEAD~ | index |
--staged は --cached と同義。
参考:
- stackoverflow / 2015-05-04: How to compare the working copy, staging copy and committed copy of a file using git
git add したファイルを取り消すと言うか、index に入れたファイルを index から外すと言うか、stage したファイルを unstage すると言うか、
したい場合は
参考:
したい場合は
git reset HEAD FILENAMEもしくは
git reset -- FILENAMEFILENAME が commit 名と衝突しないなら HEAD や -- は省略可能
参考:
- kanonjiの日記 / 2010-11-16: git addの取り消しと、コミット済みのファイルを除外する方法
ヘルプに出て来ないので見落としていたが、git ls-files なんてサブコマンドがあるらしい。
- Qiita / zimathon / 2014-11-25: git ls-files
手順としてはこんな感じ。
側枝 rearrange-code/XXX-A に first-forward せずに merge する(この時点では入れ替えたいコード以外は消滅している)。
その後 rearrange-code/XXX の working copy (これは入れ替え前の状態)を維持したまま commit id だけ rearrange-code/XXX-A に振り替えて、
目的のコードの順序を入れ替えた後、--amend オプション付きで commit すれば、
側枝 rearrange-code/XXX-B に退避しておいたコードの blame が幹である rearrange-code/XXX に継承されるという寸法。
git checkout -b rearrange-code/XXX # 幹 git checkout -b rearrange-code/XXX-A # 側枝 git checkout -b rearrange-code/XXX-B # 側枝 # 順序を入れ替えたいコード(XXX)以外を削除 git commit -a -m "Branch for changing the order of XXX function." git checkout rearrange-code/XXX-A git merge --no-ff -m git checkout rearrange-code/XXX git reset rearrange-code/XXX-A # 順序を入れ替えたいコード(XXX)を移動 commit commit -a --amend -m "Change the order of XXX function."側枝 rearrange-code/XXX-B に入れ替えたいコードのみを分離しておいて、
側枝 rearrange-code/XXX-A に first-forward せずに merge する(この時点では入れ替えたいコード以外は消滅している)。
その後 rearrange-code/XXX の working copy (これは入れ替え前の状態)を維持したまま commit id だけ rearrange-code/XXX-A に振り替えて、
目的のコードの順序を入れ替えた後、--amend オプション付きで commit すれば、
側枝 rearrange-code/XXX-B に退避しておいたコードの blame が幹である rearrange-code/XXX に継承されるという寸法。
以下のようにすると特定の関数のみ抽出して変更履歴を追跡できる。
この機能いつから実装されていたのか疑問に思って blame 辿ってみたら、少なくともドキュメント上では 6 年前の 2013-03-29 に変更が入ってた。
git log -L :<funcname>:<file>ネタ元:
この機能いつから実装されていたのか疑問に思って blame 辿ってみたら、少なくともドキュメント上では 6 年前の 2013-03-29 に変更が入ってた。
- https://github.com/git/git/blame/5d57cac6ae7c661d4...
- https://github.com/git/git/commit/13b8f68c1f0b6d4f...
従来、SHA-1 だったハッシュ値だが Git 2.29 からは SHA-256 によるハッシュ値にも(試験的に)対応したらしい。
Cygwin には 2020-10-19 ビルドのバイナリが速攻で収録されてた。
しかし Ubuntu は現時点だと、focal(20.04LTS)で 2.25.1、groovy(20.10)で 2.27.0、
Debian ですら、testing, sid, experimental が 2.28.0 という状況。
あまり自前ビルドしたくないので、この辺りの足並って欲しいところ。
現時点では experimental と言われてるし、そのうち SHA-1 から SHA-256 への変換とかが出るんじゃないかと思うので、しばらく様子見よいだろうか?
- OSDN / Magazine / 2020-10-20: SHA-256を実験サポートした「Git 2.29」が公開
- https://twitter.com/msmhrt/status/1320587760080547...
- The GitHub Blog / 2020-10-19: Highlights from Git 2.29
Cygwin には 2020-10-19 ビルドのバイナリが速攻で収録されてた。
- Cygwin Package Search / Listing / git-2.29.0-1
しかし Ubuntu は現時点だと、focal(20.04LTS)で 2.25.1、groovy(20.10)で 2.27.0、
Debian ですら、testing, sid, experimental が 2.28.0 という状況。
あまり自前ビルドしたくないので、この辺りの足並って欲しいところ。
現時点では experimental と言われてるし、そのうち SHA-1 から SHA-256 への変換とかが出るんじゃないかと思うので、しばらく様子見よいだろうか?
コメントをかく