「Git」の版間の差分
(拡張機能を翻訳して追加) |
(他言語へのリンクを追加) |
||
(2人の利用者による、間の14版が非表示) | |||
1行目: | 1行目: | ||
[[Category:バージョン管理システム]] |
[[Category:バージョン管理システム]] |
||
[[Category:コマンド]] |
[[Category:コマンド]] |
||
+ | [[Category:OpenPGP]] |
||
+ | [[de:Git]] |
||
[[en:Git]] |
[[en:Git]] |
||
+ | [[es:Git]] |
||
+ | [[ru:Git]] |
||
[[zh-hans:Git]] |
[[zh-hans:Git]] |
||
{{Related articles start}} |
{{Related articles start}} |
||
8行目: | 12行目: | ||
{{Related|Git サーバー}} |
{{Related|Git サーバー}} |
||
{{Related|Gitweb}} |
{{Related|Gitweb}} |
||
− | {{Related|Cgit}} |
||
{{Related|HTTP トンネリング#Git のトンネリング}} |
{{Related|HTTP トンネリング#Git のトンネリング}} |
||
{{Related|Subversion}} |
{{Related|Subversion}} |
||
− | {{Related| |
+ | {{Related|VCS パッケージガイドライン}} |
{{Related articles end}} |
{{Related articles end}} |
||
52行目: | 55行目: | ||
他の設定については [[#高度な設定]] を見て下さい。 |
他の設定については [[#高度な設定]] を見て下さい。 |
||
− | == |
+ | == 使い方 == |
− | Git |
+ | Gitリポジトリは、リビジョン履歴やその他のメタデータを保持する {{ic|.git}} ディレクトリ内に含まれています。リポジトリによって追跡されるディレクトリは、デフォルトでは親ディレクトリであり、作業ディレクトリ(working directory)と呼ばれます。作業ツリー(working tree)内の変更は、リポジトリに記録(コミット)する前にステージングする必要があります。また、Gitを使用すると、以前にコミットされた作業ツリーのファイルを復元することもできます。 |
[https://git-scm.com/book/en/Getting-Started-Git-Basics Getting Started - Git Basics] を参照してください。 |
[https://git-scm.com/book/en/Getting-Started-Git-Basics Getting Started - Git Basics] を参照してください。 |
||
60行目: | 63行目: | ||
=== Git リポジトリの取得 === |
=== Git リポジトリの取得 === |
||
+ | [https://git-scm.com/book/ja/v2/Git-%e3%81%ae%e5%9f%ba%e6%9c%ac-Git-%e3%83%aa%e3%83%9d%e3%82%b8%e3%83%88%e3%83%aa%e3%81%ae%e5%8f%96%e5%be%97 Git リポジトリの取得 - Git の基本] を参照してください |
||
− | * リポジトリの初期化 |
||
− | :{{ic|git init}}, 参照 {{man|1|git-init}} |
||
− | * 既存のリポジトリのクローンを作成 |
||
− | :{{ic|git clone ''repository''}}, 参照 {{man|1|git-clone}} (Git URL についても説明します) |
||
=== 変更の記録 === |
=== 変更の記録 === |
||
+ | [https://git-scm.com/book/ja/v2/Git-%e3%81%ae%e5%9f%ba%e6%9c%ac-%e5%a4%89%e6%9b%b4%e5%86%85%e5%ae%b9%e3%81%ae%e3%83%aa%e3%83%9d%e3%82%b8%e3%83%88%e3%83%aa%e3%81%b8%e3%81%ae%e8%a8%98%e9%8c%b2 変更内容のリポジトリへの記録 - Git の基本] を参照してください |
||
− | Git プロジェクトにはステージング領域があります。これは、Git ディレクトリにある {{ic|index}} ファイルで、次のコミットに反映される変更点を保存しておくものです。したがって、変更したファイルを記録するには、まずそれをインデックスに追加する (ステージングする) 必要があります。そして、{{ic|git commit}} コマンドは現在のインデックスを新しいコミットに格納します。 |
||
− | + | === コミット履歴の閲覧 === |
|
+ | [https://git-scm.com/book/ja/v2/Git-%e3%81%ae%e5%9f%ba%e6%9c%ac-%e3%82%b3%e3%83%9f%e3%83%83%e3%83%88%e5%b1%a5%e6%ad%b4%e3%81%ae%e9%96%b2%e8%a6%a7 コミット履歴の閲覧 - Git の基本] を参照してください |
||
− | * 作業ツリーの変更をインデックスに追加 |
||
− | :{{ic|git add ''pathspec''}}, 参照 {{man|1|git-add}} |
||
− | * * インデックスから変更を削除 |
||
− | :{{ic|git reset ''pathspec''}}, 参照 {{man|1|git-reset}} |
||
− | * コミットする変更、ステージングされていない変更、追跡されていないファイルを表示する |
||
− | :{{ic|git status}}, 参照 {{man|1|git-status}} |
||
− | |||
− | Git に特定の未追跡ファイルを無視させるには、{{ic|.gitignore}} ファイルを使用します。 |
||
− | |||
− | Git はファイルの動きを追跡しません。マージ中の移動の検出は、内容の類似性のみに基づいて行われます。{{ic|git mv}} コマンドは便宜上存在するだけで、これと同等です。 |
||
− | |||
− | $ mv -i foo bar |
||
− | $ git reset -- foo |
||
− | $ git add bar |
||
− | |||
− | ==== 変更をコミット ==== |
||
− | |||
− | {{ic|git commit}} コマンドは段階的な変更をリポジトリに記録します。{{man|1|git-commit}} を参照してください。 |
||
− | |||
− | * {{ic|-m}} - デフォルトのテキストエディタでコミットメッセージを作成する代わりに、引数としてコミットメッセージを指定します。 |
||
− | * {{ic|-a}} - 変更または削除されたファイルを自動的にステージングします (追跡されていないファイルは追加されません) |
||
− | * {{ic|--amend}} - 直近のコミットをやり直し、コミットメッセージやコミットされたファイルを修正します。 |
||
− | |||
− | {{Tip|常に小さな変化を頻繁に、そして意味のあるメッセージを添えてコミットしてください。}} |
||
− | |||
− | ==== リビジョンを選択 ==== |
||
− | |||
− | Git には、リビジョンを指定する方法が複数あります。{{man|7|gitrevisions}} と [https://git-scm.com/book/en/v2/Git-Tools-Revision-Selection Revision Selection] を参照してください。 |
||
− | |||
− | 多くの Git コマンドは、リビジョンを引数として受け取ります。コミットは、以下のいずれかによって識別されます。 |
||
− | |||
− | * コミットの SHA-1 ハッシュ (通常、最初の7桁でコミットを一意に識別できます。) |
||
− | * ブランチ名やタグ名などの任意のコミット ラベル |
||
− | * ラベル {{ic|HEAD}} は常に現在チェックアウトされているコミット (通常はブランチの先頭、ただし ''git checkout'' を使って古いコミットに履歴を戻した場合は除く) を指します。 |
||
− | * 上記のいずれかと、前のコミットを参照するための {{ic|~}} を加えたものです。例えば、{{ic|HEAD~}} は {{ic|HEAD}} の一つ前のコミットを指し、{{ic|HEAD~5}} は {{ic|HEAD}} の五つ前のコミットを指し示します。 |
||
− | |||
− | ==== 変更を閲覧 ==== |
||
− | |||
− | コミット間の差分を表示: |
||
− | |||
− | $ git diff HEAD HEAD~3 |
||
− | |||
− | ステージングエリアと作業ツリーの差分を表示: |
||
− | |||
− | $ git diff |
||
− | |||
− | 変更の要点を表示: |
||
− | |||
− | $ git status |
||
− | |||
− | 変更の履歴を表示 ("''-N''" は表示する直近のコミット数): |
||
− | |||
− | $ git log ''(-N)'' |
||
=== 元に戻す === |
=== 元に戻す === |
||
+ | [https://git-scm.com/book/ja/v2/Git-%e3%81%ae%e5%9f%ba%e6%9c%ac-%e4%bd%9c%e6%a5%ad%e3%81%ae%e3%82%84%e3%82%8a%e7%9b%b4%e3%81%97 作業のやり直し - Git の基本] を参照してください |
||
− | * {{ic|git checkout}} - を使って作業ツリーファイルを復元することができます{{man|1|git-checkout}} |
||
− | * {{ic|git reset}} - 現在の HEAD を指定された状態にリセット、{{man|1|git-reset}} を参照 |
||
− | * {{ic|git revert}} - 既存のコミットを revert するには {{man|1|git-revert}} を参照してください。 |
||
+ | === リモートの操作 === |
||
− | これらについては、[https://www.atlassian.com/git/tutorials/undoing-changes undoing-changes] でさらに詳しく説明しています。 |
||
+ | [https://git-scm.com/book/ja/v2/Git-%e3%81%ae%e5%9f%ba%e6%9c%ac-%e3%83%aa%e3%83%a2%e3%83%bc%e3%83%88%e3%81%a7%e3%81%ae%e4%bd%9c%e6%a5%ad リモートでの作業 - Git の基本] を参照してください |
||
− | より複雑な履歴の変更、たとえば {{ic|git commit --amend}} や {{ic|git rebase}} については、たとえば [https://www.atlassian.com/git/tutorials/rewriting-history rewriting-history] をご覧ください。このような書き換えは、他のユーザーと共同で行ったコミットには使用しないことを強く推奨します。少なくとも、事前に十分な調整をする必要があります。 |
||
− | === ブランチ |
+ | === ブランチ === |
+ | [https://git-scm.com/book/ja/v2/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%81%af ブランチの概要 - Git のブランチ機能] を参照してください |
||
− | 基本的に、修正や新しい機能などはブランチでテストします。変更が問題ないようだったら、デフォルトのブランチ (master) にマージします。ブランチを作成するときは、目的に適った名前を付けて下さい: |
||
+ | ==== 基本的なブランチとマージ ==== |
||
− | $ git branch ''help-section-addition'' |
||
+ | [https://git-scm.com/book/ja/v2/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 のブランチ機能] を参照してください |
||
− | ブランチを一覧: |
||
+ | ==== ブランチ管理 ==== |
||
− | $ git branch |
||
+ | [https://git-scm.com/book/ja/v2/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%ae%e7%ae%a1%e7%90%86 ブランチ管理 - Git のブランチ機能] を参照してください |
||
− | ブランチを切り替え: |
||
+ | ==== ブランチでの作業の流れ ==== |
||
− | $ git checkout ''branch'' |
||
+ | [https://git-scm.com/book/ja/v2/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%a7%e3%81%ae%e4%bd%9c%e6%a5%ad%e3%81%ae%e6%b5%81%e3%82%8c ブランチでの作業の流れ - Git のブランチ機能] を参照してください |
||
− | ブランチを作成して切り替え: |
||
+ | ==== リモートブランチ ==== |
||
− | $ git checkout -b ''branch'' |
||
+ | [https://git-scm.com/book/ja/v2/Git-%e3%81%ae%e3%83%96%e3%83%a9%e3%83%b3%e3%83%81%e6%a9%9f%e8%83%bd-%e3%83%aa%e3%83%a2%e3%83%bc%e3%83%88%e3%83%96%e3%83%a9%e3%83%b3%e3%83%81 リモートブランチ - Git のブランチ機能] を参照してください |
||
− | ブランチを master ブランチにマージ: |
||
+ | ==== リベース ==== |
||
− | $ git checkout master |
||
− | $ git merge ''branch'' |
||
+ | [https://git-scm.com/book/ja/v2/Git-%e3%81%ae%e3%83%96%e3%83%a9%e3%83%b3%e3%83%81%e6%a9%9f%e8%83%bd-%e3%83%aa%e3%83%99%e3%83%bc%e3%82%b9 リベース - Git のブランチ機能] を参照してください |
||
− | 変更が衝突しない場合はマージされます。衝突する場合は衝突箇所が記録されます。{{ic|git diff}} を使ってどこで衝突しているのか確認することができるので、手動で衝突の解消をする必要があります。 |
||
+ | === コラボレーション === |
||
− | ブランチが不要になったら、次のコマンドで''削除''します: |
||
+ | ==== 分散ワークフロー ==== |
||
− | $ git branch -d ''branch'' |
||
+ | [https://git-scm.com/book/ja/v2/Git-%e3%81%a7%e3%81%ae%e5%88%86%e6%95%a3%e4%bd%9c%e6%a5%ad-%e5%88%86%e6%95%a3%e4%bd%9c%e6%a5%ad%e3%81%ae%e6%b5%81%e3%82%8c 分散作業の流れ - Git での分散作業] を参照してください |
||
− | === 共同作業 === |
||
− | ==== |
+ | ==== プロジェクトへの貢献==== |
+ | [https://git-scm.com/book/ja/v2/Git-%e3%81%a7%e3%81%ae%e5%88%86%e6%95%a3%e4%bd%9c%e6%a5%ad-%e3%83%97%e3%83%ad%e3%82%b8%e3%82%a7%e3%82%af%e3%83%88%e3%81%b8%e3%81%ae%e8%b2%a2%e7%8c%ae プロジェクトへの貢献 - Git での分散作業] を参照してください |
||
− | * 既存のプロジェクトに貢献しようと考えた場合、プロジェクトのライセンスを確認しましょう。コードの変更についてかなり制限がかけられている場合もあります。ライセンスによっては、コードの所有権について論争が生まれることも考えられます。 |
||
− | * プロジェクトのコミュニティを観測してどうやったら適合できるか考えましょう。プロジェクトの方向性を理解するために、ドキュメントやリポジトリの[[#履歴とバージョニング|ログ]]を読むのも大切です。 |
||
− | * コミットを pull するようにリクエストしたり、パッチを送るときは、できるかぎりパッチを短くして説明を付加するようにしましょう。メンテナがあなたの変更箇所を理解するための手助けとなり、マージするか、もしくは修正を加えるよう要求すべきか判断する基準にもなります。 |
||
− | * リジェクトされたとしても、落胆する必要はありません。所詮他人のプロジェクトです。リクエストが重要な場合、出来るかぎり分かりやすく根気よくリクエストの理由を説明しましょう。いつかは解決に導かれるはずです。 |
||
− | ==== |
+ | ==== プロジェクトの運営 ==== |
+ | [https://git-scm.com/book/ja/v2/Git-%e3%81%a7%e3%81%ae%e5%88%86%e6%95%a3%e4%bd%9c%e6%a5%ad-%e3%83%97%e3%83%ad%e3%82%b8%e3%82%a7%e3%82%af%e3%83%88%e3%81%ae%e9%81%8b%e5%96%b6 プロジェクトの運営 - Git での分散作業] を参照してください |
||
− | プロジェクトへの貢献を始めるには、まずリポジトリを ''clone'' します: |
||
+ | === Git ツール === |
||
− | $ git clone ''location'' ''folder'' |
||
+ | ==== リビジョンの選択 ==== |
||
− | {{ic|''location''}} はパスでもネットワークアドレスでもかまいません。また、複製が完了すると場所が記録されるので、{{ic|git pull}} だけで複製できるようになります。 |
||
+ | [https://git-scm.com/book/ja/v2/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-%e3%83%aa%e3%83%93%e3%82%b8%e3%83%a7%e3%83%b3%e3%81%ae%e9%81%b8%e6%8a%9e リビジョンの選択 - Git ツール] を参照してください |
||
− | ==== プルリクエスト ==== |
||
+ | ==== 対話的なステージング ==== |
||
− | 変更を加えてコミットしたら、ソフトウェアの作者にマージするように要求することができます。これを「プルリクエスト」と呼びます。'''pull''' するには: |
||
+ | [https://git-scm.com/book/ja/v2/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-%e5%af%be%e8%a9%b1%e7%9a%84%e3%81%aa%e3%82%b9%e3%83%86%e3%83%bc%e3%82%b8%e3%83%b3%e3%82%b0 対話的なステージング - Git ツール] を参照してください |
||
− | $ git pull ''location'' master |
||
+ | ==== 作業の隠しかたと消しかた ==== |
||
− | ''pull'' コマンドは ''fetch'' と ''merge'' の組み合わせです。衝突があった場合 (例えば同じ時間帯にソフトウェアの作者が変更を加えた場合)、手動で解消する必要があります。 |
||
+ | [https://git-scm.com/book/ja/v2/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-%e4%bd%9c%e6%a5%ad%e3%81%ae%e9%9a%a0%e3%81%97%e3%81%8b%e3%81%9f%e3%81%a8%e6%b6%88%e3%81%97%e3%81%8b%e3%81%9f 作業の隠しかたと消しかた - Git ツール] |
||
− | もしくは、オリジナルの作者は取り込みたい変更を '''pick''' することができます。''fetch'' オプションを使って (そして ''log'' オプションで特殊な {{ic|FETCH_HEAD}} 記号を使用)、プルリクエストの中身を表示してから何をするか決められます: |
||
+ | ==== 作業内容への署名 ==== |
||
− | $ git fetch ''location'' master |
||
− | $ git log -p HEAD..FETCH_HEAD |
||
− | $ git merge ''location'' master |
||
+ | [https://git-scm.com/book/ja/v2/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-%e4%bd%9c%e6%a5%ad%e5%86%85%e5%ae%b9%e3%81%b8%e3%81%ae%e7%bd%b2%e5%90%8d 作業内容への署名 - Git ツール] を参照してください |
||
− | ==== リモートの使用 ==== |
||
+ | ==== 検索 ==== |
||
− | リモートは追跡しているリポジトリです。''label'' で場所を定義します。大抵は頻繁にアクセスするリポジトリで使われます。リモートを作成: |
||
+ | [https://git-scm.com/book/ja/v2/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%a4%9c%e7%b4%a2 検索 - Git ツール] を参照してください |
||
− | $ git remote add ''label'' ''location'' |
||
+ | ==== 履歴の書き換え ==== |
||
− | リモートを取得: |
||
+ | [https://git-scm.com/book/ja/v2/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 履歴の書き換え - Git ツール] を参照してください |
||
− | $ git fetch ''label'' |
||
+ | ==== リセットコマンド ==== |
||
− | マスターとリモートのマスターの変更点を表示: |
||
+ | [https://git-scm.com/book/ja/v2/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-%e3%83%aa%e3%82%bb%e3%83%83%e3%83%88%e3%82%b3%e3%83%9e%e3%83%b3%e3%83%89%e8%a9%b3%e8%aa%ac リセットコマンド詳説 - Git ツール] を参照してください |
||
− | $ git log -p master..''label''/master |
||
+ | ==== 高度なマージ ==== |
||
− | 現在のリポジトリのリモートを表示: |
||
+ | [https://git-scm.com/book/ja/v2/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-%e9%ab%98%e5%ba%a6%e3%81%aa%e3%83%9e%e3%83%bc%e3%82%b8%e6%89%8b%e6%b3%95 高度なマージ手法 - Git ツール] を参照してください |
||
− | $ git remote -v |
||
+ | ==== Rerere ==== |
||
− | フォーク元 (先行プロジェクト) のリモートを定義するときは ''upstream'' として定義します。 |
||
+ | [https://git-scm.com/book/ja/v2/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-Rerere Rerere - Git ツール] を参照してください |
||
− | ==== リポジトリにプッシュ ==== |
||
+ | ==== Git によるデバッグ ==== |
||
− | ソフトウェアの作者から権限を与えられたら、変更を '''push''' することができます: |
||
+ | [https://git-scm.com/book/ja/v2/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-Git-%e3%81%ab%e3%82%88%e3%82%8b%e3%83%87%e3%83%90%e3%83%83%e3%82%b0 Git によるデバッグ - Git ツール] を参照してください |
||
− | $ git push ''location'' ''branch'' |
||
+ | ==== サブモジュール ==== |
||
− | {{ic|git clone}} が実行されると、オリジナルの URL が記録され {{ic|origin}} というリモート名が与えられます。大抵の場合は以下のようにしてプッシュできます: |
||
+ | [https://git-scm.com/book/ja/v2/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-%e3%82%b5%e3%83%96%e3%83%a2%e3%82%b8%e3%83%a5%e3%83%bc%e3%83%ab サブモジュール - Git ツール] を参照してください |
||
− | $ git push origin master |
||
+ | ==== バンドル ==== |
||
− | {{ic|-u}} ({{ic|--set-upstream-to}}) オプションを使用すると、位置が記録されて次回からは {{ic|git push}} だけでも実行できます。 |
||
+ | [https://git-scm.com/book/ja/v2/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-%e3%83%90%e3%83%b3%e3%83%89%e3%83%ab%e3%83%95%e3%82%a1%e3%82%a4%e3%83%ab%e3%81%ae%e4%bd%9c%e6%88%90 バンドルファイルの作成 - Git ツール] を参照してください |
||
− | ==== マージの対処 ==== |
||
+ | ==== 置換 ==== |
||
− | マージの衝突を解決する方法は Git Book の [https://git-scm.com/book/ja/v2/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#%E3%83%9E%E3%83%BC%E3%82%B8%E6%99%82%E3%81%AE%E3%82%B3%E3%83%B3%E3%83%95%E3%83%AA%E3%82%AF%E3%83%88 マージ時のコンフリクト] を見てください。マージは基本的に可逆です。{{ic|--abort}} コマンドを使うことでマージを取り消すことができます (例: {{ic|git merge --abort}} または {{ic|git pull --abort}}) |
||
+ | [https://git-scm.com/book/ja/v2/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-Git-%e3%82%aa%e3%83%96%e3%82%b8%e3%82%a7%e3%82%af%e3%83%88%e3%81%ae%e7%bd%ae%e3%81%8d%e6%8f%9b%e3%81%88 Git オブジェクトの置き換え - Git ツール] を参照してください |
||
− | === 履歴とバージョニング === |
||
− | ==== |
+ | ==== 認証情報ストレージ ==== |
+ | [https://git-scm.com/book/ja/v2/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-%e8%aa%8d%e8%a8%bc%e6%83%85%e5%a0%b1%e3%81%ae%e4%bf%9d%e5%ad%98 認証情報の保存 - Git ツール] を参照してください |
||
− | {{ic|git log}} では履歴とコミットのチェックサムや作者、日付、ショートメッセージを表示します。チェックサムはコミットオブジェクトのオブジェクト名であり、通常は40文字の SHA-1 ハッシュになります。履歴とロングメッセージを表示するには ("''checksum''" は一意であるかぎり短く省略できます): |
||
− | |||
− | $ git show (''checksum'') |
||
− | |||
− | 追跡されているファイルをパターン検索: |
||
− | |||
− | $ git grep ''pattern'' |
||
− | |||
− | '''{{ic|.c}}''' と '''{{ic|.h}}''' ファイルを検索: |
||
− | |||
− | $ git grep ''pattern'' -- '*.[ch]' |
||
− | |||
− | ==== タグ付け ==== |
||
− | |||
− | コミットにタグを付ける: |
||
− | |||
− | $ git tag 2.14 ''checksum'' |
||
− | |||
− | タグは一般的に [https://www.drupal.org/node/1066342 リリースやバージョニング] するときに付けられますが文字列は何でもかまいません。通常は Git データベースに追加される注釈付きタグが用いられます。最新のコミットにタグを付けるには: |
||
− | |||
− | $ git tag -a 2.14 -m "Version 2.14" |
||
− | |||
− | タグを確認: |
||
− | |||
− | $ git tag -l |
||
− | |||
− | タグを削除: |
||
− | |||
− | $ git tag -d 2.08 |
||
− | |||
− | タグを更新: |
||
− | |||
− | $ git push --tags |
||
− | |||
− | ==== コミットの修正 ==== |
||
− | |||
− | プルリクエストを送信する前に、コミットを整理・統合するのが望ましいことがあります。{{ic|git rebase}} のインタラクティブオプションを使います: |
||
− | |||
− | $ git rebase -i ''checksum'' |
||
− | |||
− | コマンドを実行すると指定された範囲のコミットが全てエディタで開かれます。上記の場合、最新のコミット ({{ic|HEAD}}) から {{ic|''checksum''}} コミットまでが開かれます。数字で指定する場合、例えば {{ic|HEAD~3}} なら最後の3つのコミットがリベースされます: |
||
− | |||
− | pick d146cc7 Mountpoint test. |
||
− | pick 4f47712 Explain -o option in readme. |
||
− | pick 8a4d479 Rename documentation. |
||
− | |||
− | 最初のカラムに rebase で実行する動作を記述します。以下から選んでください: |
||
− | |||
− | * {{ic|pick}} — コミットをそのまま適用します。(デフォルト) |
||
− | * {{ic|edit}} — ファイルやコミットメッセージを編集。 |
||
− | * {{ic|reword}} — コミットメッセージを編集。 |
||
− | * {{ic|squash}} — 前のコミットにマージ。 |
||
− | * {{ic|fixup}} — 前のコミットにマージ。メッセージは破棄。 |
||
− | |||
− | コミットの順番を変えたり履歴から消去することが可能です (ただし注意して操作してください)。ファイルの編集後、Git は指示された作業を実施します。マージ時の問題を解決するように要求された場合、修正してから {{ic|git rebase --continue}} で続行するか、{{ic|git rebase --abort}} コマンドで中止してください。 |
||
− | |||
− | {{Note|コミットの squash はローカルコミットでのみ使います。他人と共有しているリポジトリで使うと問題が発生します。}} |
||
== ヒントとテクニック == |
== ヒントとテクニック == |
||
337行目: | 221行目: | ||
* ユーザー名とパスワードを使って認証している場合、サーバーが SSH をサポートしているなら [[SSH 鍵]]に切り替えてください。もしくは [https://git-scm.com/docs/git-credential-cache git-credential-cache] や [https://git-scm.com/docs/git-credential-store git-credential-store] を使ってみて下さい。 |
* ユーザー名とパスワードを使って認証している場合、サーバーが SSH をサポートしているなら [[SSH 鍵]]に切り替えてください。もしくは [https://git-scm.com/docs/git-credential-cache git-credential-cache] や [https://git-scm.com/docs/git-credential-store git-credential-store] を使ってみて下さい。 |
||
− | === git-credential-libsecret を |
+ | === git-credential-libsecret を認証情報ヘルパーとして使用する === |
− | Git は [[GNOME/Keyring]] や [[ |
+ | Git は [[GNOME/Keyring]] や [[KeePass]] のような org.freedesktop.secrets と互換性のあるキーリングから認証情報を取得することがあります。そのため、互換性のあるキーリングを一つセットアップし、キーリングが dbus に登録されているかどうかを確認します。 |
dbus-send --session --print-reply --dest=org.freedesktop.DBus / \ |
dbus-send --session --print-reply --dest=org.freedesktop.DBus / \ |
||
350行目: | 234行目: | ||
その後 git をセットアップします。 |
その後 git をセットアップします。 |
||
+ | |||
+ | === git-credential-netrc を認証情報ヘルパーとして使用する === |
||
+ | |||
+ | Git は、[https://www.gnu.org/software/inetutils/manual/html_node/The-_002enetrc-file.html netrc] ファイルを読み取って認証情報にアクセスできます。まず、Git を netrc ヘルパースクリプトに誘導します。 |
||
+ | |||
+ | $ git config --global credential.helper /usr/share/git/credential/netrc/git-credential-netrc.perl |
||
+ | |||
+ | 次に、{{ic|.netrc}} ファイルを [[作成]] します。 |
||
+ | |||
+ | {{hc|~/.netrc| |
||
+ | machine git-host |
||
+ | login username |
||
+ | password password |
||
+ | }} |
||
+ | |||
+ | 認証情報ヘルパーは [[gpg]] で暗号化されたファイル ({{ic|~/.netrc.gpg}}) もサポートします。 |
||
=== デフォルトプロトコル === |
=== デフォルトプロトコル === |
||
368行目: | 268行目: | ||
=== Git プロンプト === |
=== Git プロンプト === |
||
− | Git パッケージにはプロンプトスクリプトが付属しています。 |
+ | Git パッケージにはプロンプトスクリプトが付属しています。これを有効にするには、{{ic|/usr/share/git/completion/git-prompt.sh}} をソースし、{{ic|%s}} パラメータを使用してカスタムプロンプトを設定します。 |
* [[Bash]] の場合: {{ic|1=PS1='[\u@\h \W$(__git_ps1 " (%s)")]\$ '}} |
* [[Bash]] の場合: {{ic|1=PS1='[\u@\h \W$(__git_ps1 " (%s)")]\$ '}} |
||
− | * [[zsh]] の場合: {{ic|1=PS1='[%n@%m %c$(__git_ps1 " (%s)")]\$ '}} |
+ | * [[zsh]] の場合: {{ic|1=setopt PROMPT_SUBST ; PS1='[%n@%m %c$(__git_ps1 " (%s)")]\$ '}} |
− | Git リポジトリのディレクトリに |
+ | Git リポジトリのディレクトリに変更すると、プロンプトが変化してブランチ名が表示されます。対応する環境変数を設定することで、追加の詳細がプロンプトに表示されるように設定できます。 |
{| class="wikitable" |
{| class="wikitable" |
||
379行目: | 279行目: | ||
! シェル変数 !! 情報 |
! シェル変数 !! 情報 |
||
|- |
|- |
||
− | | GIT_PS1_SHOWDIRTYSTATE || ステージ済みの場合は '''+'''、未ステージの場合は '''*''' |
+ | | GIT_PS1_SHOWDIRTYSTATE || ステージ済みの場合は '''+'''、未ステージの場合は '''*''' |
|- |
|- |
||
− | | GIT_PS1_SHOWSTASHSTATE || スタッシュが存在する場合は '''$''' |
+ | | GIT_PS1_SHOWSTASHSTATE || スタッシュが存在する場合は '''$''' |
|- |
|- |
||
− | | GIT_PS1_SHOWUNTRACKEDFILES || 追跡されていないファイルが存在する場合は '''%''' |
+ | | GIT_PS1_SHOWUNTRACKEDFILES || 追跡されていないファイルが存在する場合は '''%''' |
|- |
|- |
||
− | | GIT_PS1_SHOWUPSTREAM || 上流からの進み・戻り・分岐 ('''<,>,<>''') |
+ | | GIT_PS1_SHOWUPSTREAM || 上流からの進み・戻り・分岐 ('''<,>,<>''') |
+ | |- |
||
+ | | GIT_PS1_STATESEPARATOR || ブランチ名と状態記号の間の区切り文字 |
||
+ | |- |
||
+ | | GIT_PS1_DESCRIBE_STYLE || HEAD が切り離されている場合、タグまたはブランチに関連するコミットを表示します |
||
+ | |- |
||
+ | | GIT_PS1_SHOWCOLORHINTS || カラーで表示する |
||
|} |
|} |
||
+ | 環境変数の完全なドキュメントは、スクリプトのコメントで参照できます。 |
||
− | 変更を適用するには {{ic|GIT_PS1_SHOWUPSTREAM}} を {{ic|auto}} に設定する必要があります。 |
||
+ | {{Note| |
||
− | {{Note|{{ic|$(__git_ps1)}} が {{ic|((unknown))}} と返す場合、何もリポジトリが含まれていない {{ic|.git}} フォルダがカレントディレクトリに存在します。そのために Git が認識しなくなっています。{{ic|~/.gitconfig}} ではなく間違って {{ic|~/.git/config}} に Git の設定ファイルを作成した場合などに発生します。}} |
||
+ | * {{ic|$(__git_ps1)}} が {{ic|((unknown))}} と返す場合、何もリポジトリが含まれていない {{ic|.git}} フォルダがカレントディレクトリに存在するため Git が認識しなくなっています。{{ic|~/.gitconfig}} ではなく間違って {{ic|~/.git/config}} に Git の設定ファイルを作成した場合などに発生します。 |
||
+ | * 非常に大規模なリポジトリでプロンプトに遅延が発生している場合は、{{ic|GIT_PS1_SHOWUNTRACKEDFILES}} オプションが原因である可能性があります。このオプションは、新しいファイルを検出するたびに完全なディレクトリツリースキャンをトリガーし、パフォーマンスに顕著な影響を与えます。 これらのリポジトリに対してこのオプションをローカルで無効にするには、コマンド {{ic|git config --local bash.showUntrackedFiles false}} を使用できます。 |
||
+ | }} |
||
もしくは、{{AUR|bash-git-prompt}} や {{AUR|gittify}} など [[AUR]] にある git シェルプロンプトのカスタマイズパッケージを利用することもできます。 |
もしくは、{{AUR|bash-git-prompt}} や {{AUR|gittify}} など [[AUR]] にある git シェルプロンプトのカスタマイズパッケージを利用することもできます。 |
||
− | |||
=== ビジュアル表現 === |
=== ビジュアル表現 === |
||
458行目: | 366行目: | ||
=== メーリングリストにパッチを送信 === |
=== メーリングリストにパッチを送信 === |
||
− | メーリングリストに直接パッチを送る場合、次のパッケージをインストールする必要があります: {{Pkg|perl-authen-sasl}}, {{Pkg|perl-net-smtp-ssl}}, {{Pkg|perl-mime-tools}} |
+ | メーリングリストに直接パッチを送る場合、次のパッケージをインストールする必要があります: {{Pkg|perl-authen-sasl}}, {{Pkg|perl-net-smtp-ssl}}, {{Pkg|perl-mime-tools}} |
− | ユーザー名とメールアドレスを設定したか確認してください、[[#基本設定]]を参照 |
+ | ユーザー名とメールアドレスを設定したか確認してください、[[Git#基本設定|基本設定]] を参照 |
メールアドレスを設定: |
メールアドレスを設定: |
||
532行目: | 440行目: | ||
==== 代替案 ==== |
==== 代替案 ==== |
||
− | Virtual File System for Git (VFS for Git) は、ローカルのリポジトリがなくても git のリポジトリにアクセスできるようにするものです。(https://blogs.msdn.microsoft.com/bharry/2017/05/24/the-largest-git-repo-on-the-planet/ この Microsoft ブログ] や [[wikipedia:Virtual File System for Git|Wikipedia article]] を参照してください。) |
+ | Virtual File System for Git (VFS for Git) は、ローカルのリポジトリがなくても git のリポジトリにアクセスできるようにするものです。([https://blogs.msdn.microsoft.com/bharry/2017/05/24/the-largest-git-repo-on-the-planet/ この Microsoft ブログ] や [[wikipedia:Virtual File System for Git|Wikipedia article]] を参照してください。) |
これは、gvfs と scalar を含む git の Microsoft のフォークである {{AUR|git-vfs}} で利用可能です。 |
これは、gvfs と scalar を含む git の Microsoft のフォークである {{AUR|git-vfs}} で利用可能です。 |
2025年1月13日 (月) 18:06時点における最新版
関連記事
Git は Linux カーネルの創設者である Linus Torvalds によって設計・開発されたバージョン管理システム (VCS) です。現在 Git は Linux カーネルのソースの管理だけでなく、様々な他のプロジェクトにも使われており、Arch Linux プロジェクトもそれに含まれます。
目次
- 1 インストール
- 2 基本設定
- 3 使い方
- 4 ヒントとテクニック
- 4.1 git-config の使用
- 4.2 良いエチケットを採用する
- 4.3 認証の高速化
- 4.4 git-credential-libsecret を認証情報ヘルパーとして使用する
- 4.5 git-credential-netrc を認証情報ヘルパーとして使用する
- 4.6 デフォルトプロトコル
- 4.7 Bash 補完
- 4.8 Git プロンプト
- 4.9 ビジュアル表現
- 4.10 コミットのヒント
- 4.11 コミットへの署名
- 4.12 マスター以外のブランチで作業
- 4.13 メーリングリストにパッチを送信
- 4.14 大規模な git リポジトリの操作
- 4.15 機密情報のフィルタリング
- 4.16 HTML ヘルプファイル
- 5 拡張機能
- 6 参照
インストール
git パッケージを インストール して下さい。開発版の場合は、git-gitAUR パッケージをインストールします。git svn、git gui、gitk などのツールを使用する場合は、オプションの依存関係を確認してください。
グラフィカルフロントエンド
- Giggle — Git の GTK フロントエンド
- GitAhead — 組み込みの Merge Tool を含むグラフィカル Git クライアント
- Git Cola — Python で書かれた Git 用の洗練された強力なグラフィカル ユーザーインターフェイス
- Git Extensions — コマンドラインを使用せずに Git を制御できる Git のグラフィカルユーザーインターフェイス
- gitg — Git リポジトリを表示するための GNOME GUI クライアント
- git-gui — Git への Tcl/Tk ベースの移植可能なグラフィカルインターフェイス
- GitHub Desktop — GitHub チームによって構築された Electron ベースのグラフィカルユーザーインターフェイス
- gitk — Tcl/Tk ベースの Git リポジトリブラウザ
- Guitar — Git GUI クライアント
- lazygit — git コマンド用のシンプルなターミナル UI
- QGit — リビジョン履歴を参照し、パッチの内容と変更されたファイルを表示し、さまざまな開発ブランチをグラフィカルにたどる Git GUI ビューア
- RabbitVCS — 使用しているバージョン管理システムへのシンプルで直接的なアクセスを提供するために作成されたグラフィカルツールのセット
- Sublime Merge — Sublime Text のメーカーによる Git クライアント
- Tig — git 用の ncurses ベースのテキストモードインターフェイス
- ungit — git の汎用性を犠牲にすることなく、git に使いやすさをもたらします
基本設定
Git を使うには少なくとも名前とメールアドレスを設定する必要があります:
$ git config --global user.name "John Doe" $ git config --global user.email "johndoe@foobar.com"
こちらも参照 Getting Started - First-Time Git Setup
他の設定については #高度な設定 を見て下さい。
使い方
Gitリポジトリは、リビジョン履歴やその他のメタデータを保持する .git
ディレクトリ内に含まれています。リポジトリによって追跡されるディレクトリは、デフォルトでは親ディレクトリであり、作業ディレクトリ(working directory)と呼ばれます。作業ツリー(working tree)内の変更は、リポジトリに記録(コミット)する前にステージングする必要があります。また、Gitを使用すると、以前にコミットされた作業ツリーのファイルを復元することもできます。
Getting Started - Git Basics を参照してください。
Git リポジトリの取得
Git リポジトリの取得 - Git の基本 を参照してください
変更の記録
変更内容のリポジトリへの記録 - Git の基本 を参照してください
コミット履歴の閲覧
コミット履歴の閲覧 - Git の基本 を参照してください
元に戻す
作業のやり直し - Git の基本 を参照してください
リモートの操作
リモートでの作業 - Git の基本 を参照してください
ブランチ
ブランチの概要 - Git のブランチ機能 を参照してください
基本的なブランチとマージ
ブランチとマージの基本 - Git のブランチ機能 を参照してください
ブランチ管理
ブランチ管理 - Git のブランチ機能 を参照してください
ブランチでの作業の流れ
ブランチでの作業の流れ - Git のブランチ機能 を参照してください
リモートブランチ
リモートブランチ - Git のブランチ機能 を参照してください
リベース
リベース - Git のブランチ機能 を参照してください
コラボレーション
分散ワークフロー
分散作業の流れ - Git での分散作業 を参照してください
プロジェクトへの貢献
プロジェクトへの貢献 - Git での分散作業 を参照してください
プロジェクトの運営
プロジェクトの運営 - Git での分散作業 を参照してください
Git ツール
リビジョンの選択
リビジョンの選択 - Git ツール を参照してください
対話的なステージング
対話的なステージング - Git ツール を参照してください
作業の隠しかたと消しかた
作業内容への署名
作業内容への署名 - Git ツール を参照してください
検索
検索 - Git ツール を参照してください
履歴の書き換え
履歴の書き換え - Git ツール を参照してください
リセットコマンド
リセットコマンド詳説 - Git ツール を参照してください
高度なマージ
高度なマージ手法 - Git ツール を参照してください
Rerere
Rerere - Git ツール を参照してください
Git によるデバッグ
Git によるデバッグ - Git ツール を参照してください
サブモジュール
サブモジュール - Git ツール を参照してください
バンドル
バンドルファイルの作成 - Git ツール を参照してください
置換
Git オブジェクトの置き換え - Git ツール を参照してください
認証情報ストレージ
認証情報の保存 - Git ツール を参照してください
ヒントとテクニック
git-config の使用
Git は、4つの INI タイプの設定ファイルからその構成を読み取ります。
/etc/gitconfig
システム全体のデフォルト~/.gitconfig
と~/.config/git/config
(since 1.7.12) ユーザー固有の設定用.git/config
リポジトリ固有の設定用
これらのファイルは直接編集できますが、通常の方法は、以下の例に示すように git config を使用することです。
現在設定されている変数を一覧表示します。
$ git config {--local,--global,--system} --list
デフォルトのエディターを vim から nano に設定します。
$ git config --global core.editor "nano -w"
デフォルトのプッシュアクションを設定します。
$ git config --global push.default simple
git difftool に別のツールを設定します (デフォルトでは meld):
$ git config --global diff.tool vimdiff
詳細については、git-config(1) および Git 構成 を参照してください。
良いエチケットを採用する
- 既存のプロジェクトに貢献することを検討する場合、コードを変更する能力を過度に制限する可能性があるため、そのライセンスを読んで理解してください。ライセンスによっては、コードの所有権をめぐって紛争を引き起こす可能性があります。
- プロジェクトのコミュニティと、自分がそこにどれだけ溶け込めるかを考えましょう。プロジェクトの方向性を知るために、あらゆるドキュメントや、リポジトリの log を読んでください。
- コミットをプルしたり、パッチを提出したりするときは、小規模で十分な文書化を心がけましょう。そうすることで、メンテナがあなたの変更を理解し、マージするか修正を依頼するかを判断しやすくなります。
- もし、投稿が拒否されても、落ち込まないでください。重要なことであれば、その理由をできるだけ明確に、忍耐強く議論してください。
認証の高速化
Git サーバーにプッシュする度に認証が面倒なのをなんとかしたいと思っている場合、以下を使って下さい。
- SSH 鍵を使って認証している場合、SSH エージェントを使って下さい。SSH#SSH の高速化 や SSH#Keep alive も参照。
- ユーザー名とパスワードを使って認証している場合、サーバーが SSH をサポートしているなら SSH 鍵に切り替えてください。もしくは git-credential-cache や git-credential-store を使ってみて下さい。
git-credential-libsecret を認証情報ヘルパーとして使用する
Git は GNOME/Keyring や KeePass のような org.freedesktop.secrets と互換性のあるキーリングから認証情報を取得することがあります。そのため、互換性のあるキーリングを一つセットアップし、キーリングが dbus に登録されているかどうかを確認します。
dbus-send --session --print-reply --dest=org.freedesktop.DBus / \ org.freedesktop.DBus.GetConnectionUnixProcessID \ string:org.freedesktop.secrets
実行
git config --global credential.helper /usr/lib/git-core/git-credential-libsecret
その後 git をセットアップします。
git-credential-netrc を認証情報ヘルパーとして使用する
Git は、netrc ファイルを読み取って認証情報にアクセスできます。まず、Git を netrc ヘルパースクリプトに誘導します。
$ git config --global credential.helper /usr/share/git/credential/netrc/git-credential-netrc.perl
次に、.netrc
ファイルを 作成 します。
~/.netrc
machine git-host login username password password
認証情報ヘルパーは gpg で暗号化されたファイル (~/.netrc.gpg
) もサポートします。
デフォルトプロトコル
上述のように SSH で多重接続することで、Git over SSH の方が HTTPS よりも高速になります。また、(AUR など) サーバーによっては SSH を介して push することもできます。例えば、以下の設定をすると AUR でホストされているリポジトリで Git over SSH を設定します。
~/.gitconfig
[url "ssh://aur@aur.archlinux.org/"] insteadOf = https://aur.archlinux.org/ insteadOf = http://aur.archlinux.org/ insteadOf = git://aur.archlinux.org/
Bash 補完
Bash の補完を有効にするには、Bash のスタートアップファイルで /usr/share/git/completion/git-completion.bash
を source してください。もしくは、bash-completion をインストールしてください。
Git プロンプト
Git パッケージにはプロンプトスクリプトが付属しています。これを有効にするには、/usr/share/git/completion/git-prompt.sh
をソースし、%s
パラメータを使用してカスタムプロンプトを設定します。
- Bash の場合:
PS1='[\u@\h \W$(__git_ps1 " (%s)")]\$ '
- zsh の場合:
setopt PROMPT_SUBST ; PS1='[%n@%m %c$(__git_ps1 " (%s)")]\$ '
Git リポジトリのディレクトリに変更すると、プロンプトが変化してブランチ名が表示されます。対応する環境変数を設定することで、追加の詳細がプロンプトに表示されるように設定できます。
シェル変数 | 情報 |
---|---|
GIT_PS1_SHOWDIRTYSTATE | ステージ済みの場合は +、未ステージの場合は * |
GIT_PS1_SHOWSTASHSTATE | スタッシュが存在する場合は $ |
GIT_PS1_SHOWUNTRACKEDFILES | 追跡されていないファイルが存在する場合は % |
GIT_PS1_SHOWUPSTREAM | 上流からの進み・戻り・分岐 (<,>,<>) |
GIT_PS1_STATESEPARATOR | ブランチ名と状態記号の間の区切り文字 |
GIT_PS1_DESCRIBE_STYLE | HEAD が切り離されている場合、タグまたはブランチに関連するコミットを表示します |
GIT_PS1_SHOWCOLORHINTS | カラーで表示する |
環境変数の完全なドキュメントは、スクリプトのコメントで参照できます。
もしくは、bash-git-promptAUR や gittifyAUR など AUR にある git シェルプロンプトのカスタマイズパッケージを利用することもできます。
ビジュアル表現
作業量を把握するため:
$ git diff --stat
git log をフォーク表現:
$ git log --graph --oneline --decorate
git log グラフのエイリアス (つまり git graph は装飾されたバージョンを表示する):
$ git config --global alias.graph 'log --graph --oneline --decorate'
コミットのヒント
前のコミットにリセット (非常に危険、指定したコミットまですべて消去されます):
$ git reset --hard HEAD^
リポジトリのアドレスが変更された場合、そのリモートロケーションを更新する必要があります:
$ git remote set-url origin git@address:user/repo.git
あるいは、.git/config
を編集して新しい場所を指定します。
Signed-off-by line append (プロジェクトによっては必要な、名前と電子メールの署名がコミットに追加されます):
$ git commit -s
Signed-off-by は自動的にパッチに追加されます (git format-patch commit
を使用する場合):
$ git config --local format.signoff true
変更されたファイルの特定の部分をコミットします。これは、多数の変更があり、複数のコミットに分けたほうがよい場合に有用です。
$ git add -p
コミットへの署名
Git では、コミットやタグに GnuPG を使って署名することができます。Signing Your Work を参照してください。
Git が自動的にコミットに署名するように設定するには:
$ git config --global commit.gpgSign true
マスター以外のブランチで作業
ときに、メンテナからブランチで作業するように要求されることがあります。使われるブランチの名前は devel
や testing
などが一般的です。まずはリポジトリを複製します。
master 以外のブランチを開くには (git clone
で master ブランチしか表示されない場合、git branch -a
で他のブランチを表示できます):
$ git checkout -b branch origin/branch
通常通り編集を行ってください。ただし以下のコマンドを使ってリポジトリツリーを同期させてください:
$ git pull --all $ git push --all
メーリングリストにパッチを送信
メーリングリストに直接パッチを送る場合、次のパッケージをインストールする必要があります: perl-authen-sasl, perl-net-smtp-ssl, perl-mime-tools
ユーザー名とメールアドレスを設定したか確認してください、基本設定 を参照
メールアドレスを設定:
$ git config --global sendemail.smtpserver smtp.gmail.com $ git config --global sendemail.smtpserverport 587 $ git config --global sendemail.smtpencryption tls $ git config --global sendemail.smtpuser foobar@gmail.com
これでメーリングリストにパッチを送信することができます (OpenEmbedded:How to submit a patch to OpenEmbedded#Sending patches を参照):
$ git add filename $ git commit -s $ git send-email --to=openembedded-core@lists.openembedded.org --confirm=always -M -1
大規模な git リポジトリの操作
大規模なリモートリポジトリを操作する場合、大量のデータをフェッチする必要があります。次の例では、Linux カーネルを使用して、そのようなコードベースを操作する方法を示しています。
リポジトリ全体を取得する
最も簡単な解決策は、リポジトリ全体を取得することです。
$ git clone git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
git pull
でリポジトリを更新できます。
リポジトリの部分的な取得
ローカルリポジトリをオリジンのより小さなサブセットに制限するには、たとえば v4.14 以降でバグを二分するために、浅いクローンを使用します。
$ git clone --shallow-exclude v4.13 git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git
v4.14 以降は入手できますが、v4.13 以前は入手できません。
すべての履歴を無視して、最新のスナップショットのみが必要な場合。(tarball が利用可能で、それで十分な場合は、それを選択してください。git リポジトリからダウンロードするには、より多くの帯域幅が必要です。) 次の方法で取得できます。
$ git clone --depth 1 git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git
次の2つの例に示すように、後で古いコミットを取得できます。
$ git fetch --tags --shallow-exclude v4.1 $ git fetch --tags --shallow-since 2016-01-01
他のブランチを取得する
上記の例では、ローカル リポジトリはメインラインカーネル、つまり 最新の開発が行われた カーネルのみを追跡します。たとえば、最新の 4.14 ブランチなど、最新の LTS が必要な場合、次の方法で取得できます。
$ git remote set-branches --add origin linux-4.17.y $ git fetch $ git branch --track linux-4.17.y origin/linux-4.17.y
最後の行は必須ではありませんが、おそらく必要でしょう。 (必要なブランチの名前を知るために、一般的なルールはありません。gitweb のインターフェイスにある "ref" リンクを見れば、推測することができます。)
linux-4.17.y のスナップショットについては、次のようにします。
$ git checkout -b linux-4.17.y
または、別のディレクトリに展開するには、
$ mkdir /path/to/src-4.17; cd /path/to /src-4.17 $ git clone --no-local --depth 1 -b linux-4.17.y ../linux-stable
いつものように、git pull
を実行してスナップショットを更新します。
代替案
Virtual File System for Git (VFS for Git) は、ローカルのリポジトリがなくても git のリポジトリにアクセスできるようにするものです。(この Microsoft ブログ や Wikipedia article を参照してください。)
これは、gvfs と scalar を含む git の Microsoft のフォークである git-vfsAUR で利用可能です。
機密情報のフィルタリング
時には、ソフトウェアが平文のパスワードを設定ファイルに保存し、キーリングに接続するのとは対照的にすることがあります。このような場合、git clean-filters は機密情報を誤ってコミットしてしまうのを防ぐために便利です。たとえば、次のファイルでは "some-dotfile" というファイルにフィルタを割り当てています。
.gitattributes
some-dotfile filter=remove-pass
"some-dotfile" というファイルが git にチェックインされると、git はチェックイン前にこのファイルに対して "remove-pass" というフィルタを実行します。このフィルターは、git-configuration ファイルで定義しておく必要があります。
.git/config
[filter "remove-pass"] clean = "sed -e 's/^password=.*/#password=TODO/'"
HTML ヘルプファイル
git-htmldocsAUR をインストールすることで、git help
のドキュメントを HTML 形式で利用することもできます。インストール後、HTML ドキュメントには -w
フラグを付けてアクセスすることができます。例えば
$ git help -w merge
git config
オプションを設定すると、デフォルトで HTML ドキュメントを読み込むことができます。
$ git config --global help.format html
拡張機能
- gitflow-avh — Vincent Driessen の分岐モデル で git を拡張します。AVH Edition はより多くの機能を追加します。
- git-extras — git 用のいくつかのユーティリティ (リポジトリの概要、repl、変更ログの人数、作成者のコミット率など)
- https://github.com/tj/git-extras || git-extrasAUR - oh-my-zsh を使用している場合、git-extras プラグイン を有効にして下さい。
- gitmoji-cli — A gitmoji コミットメッセージで gitmojis を使用するためのインタラクティブな NodeJS クライアント。