初心者のためのGit:決定的な実用ガイド


854

OK、PJ Hyettによるこの投稿を見た後、最後までスキップしてGitを使用することにしました。

だから私が必要なのは、Gitの初心者向けの実用的なガイドです。「初心者」とは、コンパイラの処理方法を知っており、Makefileが何であるかをある程度理解しており、ソースコントロールを十分に理解せずに触れた人と定義されています。

「実用的」と定義されている人は、Gitがバックグラウンドで何をしているかについて詳しく知りたくなく、Gitが配布されていることを気にしません(または知りません)。あなたの答えは可能性を示唆するかもしれませんが、バックアップされて安全な「サーバー」に「メイン」リポジトリを維持し、ローカルリポジトリを単なる「クライアント」リソースとして扱いたい初心者を目指してください。

そう:

インストール/セットアップ

コードを操作する

タグ付け、ブランチ、リリース、ベースライン

その他の

その他のGit初心者向けリファレンス

Gitの詳細

私は時々エントリを調べて「整理」するので、一貫した外観/感触が得られ、リストを簡単にスキャンできます-簡単な「ヘッダー-簡単な説明-指示のリスト-落とし穴」に従ってください追加情報」テンプレート。上記の箇条書きリストのエントリにもリンクするので、後で簡単に見つけることができます。

回答:


118

新しいプロジェクト/リポジトリをどのように作成しますか?

gitリポジトリは、特別な.gitディレクトリを含むディレクトリです。

これは、「集中型」バージョン管理システム(subversionなど)とは異なります。この場合、「リポジトリ」はリモートサーバーでホストさcheckoutれ、「作業コピー」ディレクトリに置かれます。gitでは、作業コピーリポジトリです。

git init追跡したいファイルを含むディレクトリで実行してください。

例えば、

cd ~/code/project001/
git init

これにより.git、現在のディレクトリに(非表示の)フォルダが作成されます。

新しいプロジェクトを作成するにgit initは、追加の引数(作成するディレクトリの名前)を指定して実行します。

git init project002

(This is equivalent to: mkdir project002 && cd project002 && git init)

現在の現在のパスがgitリポジトリ内にあるかどうかを確認するには、単に実行しますgit status-リポジトリでない場合は、「致命的:gitリポジトリではありません」と報告されます。

.gitディレクトリを一覧表示して、次のようなファイル/ディレクトリが含まれていることを確認することもできます。

$ ls .git
HEAD         config       hooks/       objects/
branches/    description  info/        refs/

何らかの理由でリポジトリを「de-git」したい場合(そのプロジェクトの追跡にgitの使用を停止したい場合)。.gitリポジトリのベースレベルでディレクトリを削除するだけです。

cd ~/code/project001/
rm -rf .git/

注意:これにより、すべての変更履歴、すべてのタグ、Gitが実行したすべてが破棄されます。「現在の」ファイル(現在表示されているファイル)には触れませんが、以前の変更、削除されたファイルなどは回復できません!


3
Gitはオブジェクトを読み取り専用にするため、rm -rf .gitgitのデータベースを消去する必要があります。
ジョシュリー

通常、バージョン管理で無視するファイル/ツリーを指定するには、通常の使用中に.gitignoreファイルを作成する必要があります。そのため、「de-gitting」の最後の部分を完了するには、.gitを削除する以外に、も削除する必要があります。 gitignoreファイル。:)
Monoman 2010

裸のリポジトリはどうですか?それらはどういうわけか「集中型」であり、私はそれらが何らかの集中型を必要とする多くのプロジェクト(例えば:多くの人々によって開発されたプロジェクト)に良いことだと思います
peoro

git statusリポジトリ内にいることを確認するために実行されているWRT :これには1つの問題があります。現在のシェルで環境変数$ GIT_DIRが設定されている場合、gitは現在の場所を無視し、$ GIT_DIRのリポジトリを使用します。知っておくべきですが、私は昨日まで1時間を失いました。
sanmiguel 2012年

110

gitのGUI


Git GUI

gitに含まれています— git guiコマンドラインから実行すると、Windowsのmsysgitインストーラーが[スタート]メニューに追加します。

Git GUIは、gitで実行する必要があることの大部分を実行できます。ステージの変更、gitとリポジトリの構成、変更のプッシュ、ブランチの作成/チェックアウト/削除、マージ、その他多くのことを含みます。

私のお気に入りの機能の1つは、右クリックメニューの「ステージライン」と「ステージハンク」のショートカットです。これにより、ファイルの特定の部分をコミットできます。同じgit add -i方法でを実行できますが、使いやすいと思います。

これは最も美しいアプリケーションではありませんが、ほとんどすべてのプラットフォームで動作します(Tcl / Tkに基づいているため)

スクリーンショット | スクリーンキャスト


GitK

gitにも含まれています。これはgit履歴ビューアーであり、リポジトリーの履歴(ブランチ、ブランチの作成時、マージ時を含む)を視覚化できます。コミットを表示および検索できます。

git-guiとうまく連携します。


ギトナブ

Mac OS Xアプリケーション。主にと同等ですがgit loggithubとある程度統合されています(「ネットワークビュー」など)。

見た目はきれいで、Mac OS Xに適合します。リポジトリを検索できます。Gitnubの最大の批判は、履歴が直線的に表示されることです(一度に1つのブランチ)。ブランチとマージは視覚化されません。これはgitでは重要ですが、これは計画的な改善です。

リンクのダウンロード、ログとスクリーンショットの変更 | gitリポジトリ


GitX

「OS X用のgitkクローン」を意図している。

非線形の分岐履歴を視覚化し、コミットを実行し、コミットを表示および検索できます。また、任意のリビジョンのファイルを「Quicklook」(ファイルリストビューでスペースを押す)したり、ファイルをエクスポートしたりできるなど、他にも優れた機能があります。 (ドラッグアンドドロップによる)。

OS Xへの統合はgit-gui/ よりはるかに優れgitkており、非常に大きなリポジトリであっても高速で安定しています。

オリジナルのgitリポジトリピーターは最近更新されていません(執筆時点で1年以上)。より活発に維持されているブランチは、brotherbard / gitxで利用可能です-「サイドバー、フェッチ、プル、プッシュ、リモート追加、マージ、チェリーピック、リベース、クローン、クローン先」を追加します

ダウンロード | スクリーンショット | gitリポジトリ | 兄弟バードフォーク | ローロンフォーク


SmartGit

ホームページから:

SmartGitは、分散バージョン管理システムGitのフロントエンドであり、Windows、Mac OS XおよびLinuxで実行されます。SmartGitは、コマンドラインクライアントよりもグラフィカルユーザーインターフェイスを好む開発者を対象としており、現在最も強力なDVCSであるGitでさらに生産性を高めています。

あなたは彼らのウェブサイトからそれをダウンロードすることができます。

ダウンロード


TortoiseGit

Windowsユーザー向けのTortoiseSVN Gitバージョン。

TortoiseSVNをTortoiseGitに移植しています。最新リリース1.2.1.0このリリースでは、コミット、ログの表示、2つのバージョンの比較、ブランチとタグの作成、パッチの作成など、通常のタスクを完了できます。詳細については、リリースノートを参照してください。このプロジェクトに貢献することを歓迎します。

ダウンロード


QGit

QGitはQt / C ++上に構築されたgit GUIビューアです。

qgitを使用すると、さまざまな開発ブランチをグラフィカルにたどって、改訂履歴を閲覧したり、パッチの内容や変更されたファイルを表示したりできます。

ダウンロード


gitg

gitgはgtk + / GNOMEを対象としたgitリポジトリビューアです。その主な目的の1つは、複数のデスクトップにわたるgitフロントエンドに、より統一されたユーザーエクスペリエンスを提供することです。これはクロスプラットフォームアプリケーションを作成するのではなく、他のオペレーティングシステム(GitX for OS Xなど)の同様のクライアントと密接に連携することによって行われます。

特徴

  • 変更履歴を閲覧します。
  • 大きなリポジトリを処理します(Linuxリポジトリ、17000以上のリビジョンを1秒未満でロードします)。
  • 変更をコミットします。
  • 個別の塊をステージング/ステージング解除します。
  • 変更を元に戻します。
  • リビジョンの変更点を色分けして表示します。
  • 特定のリビジョンのツリーを参照します。
  • 特定のリビジョンのツリーの一部をエクスポートします。
  • 'git log'などのコマンドが履歴を構築するために理解できるrefspecを指定します。
  • 履歴ビューでブランチを表示して切り替えます。

ダウンロード:リリースまたはソース


Gitbox

Gitboxは、Gitバージョン管理システム用のMac OS Xグラフィカルインターフェイスです。1つのウィンドウに、ブランチ、履歴、作業ディレクトリのステータスが表示されます。

日常の操作は簡単です。チェックボックスで変更をステージングおよびアンステージングします。ワンクリックでコミット、プル、マージ、プッシュ。変更をダブルクリックして、FileMerge.appとの差分を表示します。

ダウンロード


ギティ

GityのWebサイトには多くの情報はありませんが、スクリーンショットから、機能豊富なオープンソースOS X git guiのようです。

ダウンロードまたはソース


溶ける

Meldは、視覚的な差分およびマージツールです。2つまたは3つのファイルを比較して、適切に編集できます(差分は動的に更新されます)。2つまたは3つのフォルダーを比較して、ファイル比較を起動できます。CVS、Subversion、Bazaar-ng、Mercurial [ およびGit ] などの一般的なバージョン管理システムから作業コピーを参照して表示できます。

ダウンロード


Steve DekorteによるOSX用のGit GUI。

一目で、プルする変更があるリモートブランチとプッシュする変更があるローカルリポジトリを確認します。add、commit、push、pull、tag、およびresetのgit opsがサポートされているほか、ローカルの変更と追加を強調表示するプロジェクト階層の視覚的な差分と視覚的な参照もサポートされています。

1つのリポジトリの場合は無料、その他の場合は$ 25。

ダウンロード


スプラウト(旧GitMac)

Gitを使いやすくすることに重点を置いています。ネイティブのCocoa(macのような)UI、高速なリポジトリブラウジング、クローニング、プッシュ/プル、分岐/マージ、視覚的な差分、リモートブランチ、ターミナルへの簡単なアクセスなどを備えています。

最も一般的に使用されるGitアクションを直感的かつ簡単に実行できるようにすることで、Sprout(以前のGitMac)はGitをユーザーフレンドリーにします。ほとんどのGitワークフローと互換性があるSproutは、デザイナーや開発者、チームコラボレーション、および上級ユーザーと初心者ユーザーに最適です。

ダウンロード | ウェブサイト


タワー

Mac OSX用の機能豊富なGit GUI。30日間の無料試用、シングルユーザーライセンスで$ 59USD。

ダウンロード | ウェブサイト


EGit

EGitは、Gitバージョン管理システム用のEclipseチームプロバイダーです。Gitは分散SCMです。つまり、すべての開発者がコードのすべてのリビジョンのすべての履歴の完全なコピーを持っているため、履歴に対するクエリを非常に高速で多目的に行うことができます。

EGitプロジェクトは、GitのJGit Java実装の上にEclipseツールを実装しています。

ダウンロード | ウェブサイト


Git拡張

オープンソースfor Windows-Gitを使用するために必要なすべてのものが単一のパッケージにインストールされ、使いやすくなっています。

Git Extensionsは、WindowsでのGitの操作をより直感的にするためのツールキットです。シェル拡張はWindowsエクスプローラーで統合され、ファイルとディレクトリのコンテキストメニューを表示します。Visual Studioからgitを使用するためのVisual Studioプラグインもあります。

ダウンロード

git guiについて詳しく説明してくれたdbrに感謝します。


SourceTree

SourceTreeは、Git、Mercurial、SVN用の無料の Macクライアントです。BitBucketの開発者であるAtlassianによって構築されたこのツールは、すべてのVCシステムで同じように機能し、すべてのプロジェクトで使用する単一のツールを習得できますが、バージョン管理されています。機能満載で無料です。

初心者と上級ユーザーの両方に対応するエキスパート対応&機能満載:

発信および着信チェンジセットを確認します。枝の間のチェリーピック。パッチの処理、リベース、スタッシュ/シェルフなど。

ダウンロード | ウェブサイト



2
良い答えはいくつかありますが(特にgitcastとプッシュ/プルの答え)、別の答えに分けることをお勧めしますか?質問者はあなたに「たくさんの情報を一つの答えにまとめようとしないでください」と要求しました!
dbr、2008年

3
たぶん、あなたはTortoiseGit code.google.com/p/tortoisegitをあなたのリストに追加するべきです、Windows gitters ...
kret

1
Gity(macendeavor.com/gity)オプションですが、(OS X)まだ開発中です
デイブ・デロング

2
Tower(「Macで最も強力なGitクライアント」)は、Gitの美しい新しいクライアントです。
rubiii

59

まあ、あなたが私たちが他のリソースに「単純に」リンクしないように頼んだという事実にもかかわらず、本当にかなり良いコミュニティが成長している(そして成長している)リソースが既に存在するとき、それはかなりばかげています:Git Community Book。真剣に、質問の中のこの20以上の質問は、簡潔で一貫性のないものになるでしょう。GitコミュニティブックはHTMLとPDFの両方で入手でき、明確で適切にフォーマットされたピアレビューされた回答と、目の前の問題に直接ジャンプできる形式で、多くの質問に答えます。

悲しいかな、私の投稿が本当にあなたを怒らせたら、私はそれを削除します。そう言ってください。


2
DVCSであるためにgitを使用していない場合は、なぜgitをまったく使用しないのですか?この質問は愚かであり、疑わしい目標を満たすために他のものに費やすことができるリソースをそらします。
Randal Schwartz、

56

ファイルを無視するように設定する方法:

追跡したくないファイルをgitに無視させる機能は非常に便利です。

ファイルまたはファイルのセットを無視するには、パターンを指定します。gitのパターン構文はかなり単純ですが、強力です。これは、後で説明する3つのファイルすべてに適用できます。

  • 空白行はファイルを無視せず、通常は区切り文字として使用されます。
  • #で始まる行はコメントとして機能します。
  • プレフィックスはオプションであり、パターンを無効にします。一致する否定パターンは、優先順位の低いパターンをオーバーライドします。
  • 高度な表現とワイルドカードをサポート
    • 例:パターン:*。[oa] は、.oまたは.aで終わるリポジトリ内のすべてのファイルを無視します(オブジェクトおよびアーカイブファイル)
  • パターンにスラッシュで終わるディレクトリがある場合、gitはこのディレクトリとその下のパスにのみ一致します。これにより、通常のファイルとシンボリックリンクが一致から除外されます。
  • 先頭のスラッシュは、そのパス名のすべてのファイルと一致します。
    • 例:パターン/*.cはファイルfoo.cに一致しますが、bar / awesome.cには一致しません

gitignore(5)の manページのすばらしい例:

$ git status
[...]
# Untracked files:
[...]
#       Documentation/foo.html
#       Documentation/gitignore.html
#       file.o
#       lib.a
#       src/internal.o
[...]
$ cat .git/info/exclude
  # ignore objects and archives, anywhere in the tree.
  *.[oa]
$ cat Documentation/.gitignore
# ignore generated html files,
*.html
# except foo.html which is maintained by hand
!foo.html
$ git status
[...]
# Untracked files:
[...]
#       Documentation/foo.html
[...]

一般に、追跡されていないファイルを無視する方法は3つあります。

1)リポジトリのすべてのユーザーに対して無視:

.gitignoreという名前のファイルを作業コピーのルートに追加します。

.gitignoreを編集して、どのファイルを無視すべきか、または無視すべきでないかについての設定に一致させます。

git add .gitignore 

完了したらコミットします。

2)リポジトリのコピーのみを無視します。

作業コピーに$ GIT_DIR / info / excludeファイルを好みのパターンで追加/編集します。

例:作業コピーは〜/ src / project1なので、〜/ src / project1 / .git / info / excludeを編集します

完了です!

3)システムで、すべての状況で無視します。

システムのグローバル無視パターンは、希望する名前のファイルに入れることができます。

私の名前〜/ .gitglobalignoreです

次に、次の行を使用して〜/ .gitconfigファイルを編集することで、このファイルをgitに通知できます。

core.excludesfile = ~/.gitglobalignore

完了です!

詳細については、gitignoreのマニュアルページを参照してください。


誰か、この投稿に重要ではないが重要な詳細を1つ追加してください。これは、gitによって追跡されていないファイルに対してのみ機能します。ファイルを「追跡解除」してファイルシステムに残すには、「git rm --cached filename」が必要です。ありがとう!
Nikita Rybak 2010

core.excludesfile行を追加してもうまくいかなかったことに注意してください。それを機能させるには、[git config --global core.excludesfile〜/ .gitglobalignore]を実行する必要がありました。
コーディングディストリクト

現在、Githubにはgitignoreと呼ばれるプロジェクトがあり、さまざまな言語および開発環境用のgitignoreファイルがあります。github.com
Ryan Lundy

47

特定のリビジョンセットに「タグ」を付けるには

特定のファイルセットの特定のリビジョンセットをどのように「マーク」、「タグ付け」、「リリース」して、後でいつでもプルできるようにするにはどうすればよいですか?

を使用して git tagコマンドます。

現在のリビジョンを単に「タグ付け」するには、単に実行します。

git tag -a thetagname
git tag -a 0.1
git tag -a 2.6.1-rc1 -m 'Released on 01/02/03'

現在のタグを一覧表示するにgit tagは、引数なしで実行するか、-l(小文字のL):

$ git tag -a thetagname # and enter a message, or use -m 'My tag annotation'
$ git tag -l
thetagname

タグを削除するには、次の-dフラグを使用します。

$ git tag -d thetagname 
Deleted tag 'thetagname'
$ git tag
[no output]

特定の(以前の)コミットにタグを付けるには、単に..

git tag [tag name] [revision SHA1 hash]

例えば:

git tag 1.1.1 81b15a68c6c3e71f72e766931df4e6499990385b

注:デフォルトでは、gitは「軽量」タグ(基本的に特定のリビジョンへの参照)を作成します。「正しい」方法は、-aフラグを使用することです。これにより、タグメッセージを要求するエディターが起動します(コミットメッセージを要求するのと同じです。-mフラグを使用して、コマンドラインでタグメッセージを指定することもできます)。注釈付きタグを使用すると、独自のID、日付、タガー(作成者)、およびオプションでGPG署名(-sタグを使用)を持つオブジェクトが作成されます。 この詳細については、この投稿を参照してください

git tag mytagwithmsg -a -m 'This is a tag, with message'

また、注釈付きのタグをリストするには、-n1フラグを使用して各タグメッセージの1行を表示します(-n245各注釈の最初の245行を表示するなど)。

$ git tag -l -n1
mytagwithmsg    This is a tag, with message

詳細については、git-tag(1)のマニュアルページを参照してください。


gitタグデフォルトではタグを作成せず、軽量の参照のみを作成します。-aまたは-sのいずれかを使用して、タグオブジェクト(describeなどが使用します)を作成する必要があります。rockstarprogrammer.org
Dustin

ああ、面白い。おかげで、これを反映するように回答を更新しました
dbr

また、以前にコミットしたリビジョンにどのようにタグを付けますか?(申し訳ありませんが長すぎるので、
すくい取りました、

hasen j:基本的に回答に情報を追加git tag tagname revision_SHA1
dbr '06 / 04/09

1
タグをリモートリポジトリにプッシュするには、git pushを使用するときに--tagsを追加します(githubヘルプエリアからの情報)。
ヘクター・ラモス

46

GITを使用したワークフローの例。

Gitは非常に柔軟性が高く、どのワークフローにも適切に適応しますが、特定のワークフローを強制しないと、線形の「バックアップ」ワークフローを超えてgitで何ができるかを理解できなくなり、たとえば、分岐がどのように役立つかという悪影響が生じる可能性があります。 。

このブログ投稿は、Gitを使用して設定するのが非常に簡単で、非常にシンプルで効果的なワークフローについて説明しています。

ブログの投稿からの引用:origin / masterは、HEADのソースコードが常にプロダクションの準備完了状態を反映するメインブランチであると見なします。

ワークフローは、このワークフローを実装するプロジェクトを作成するのに十分な人気になっています:git-flow

開発ですべての変更を行い、コードがプロダクション状態のときにのみマスターにプッシュする単純なワークフローの素晴らしいイラスト:

シンプルなワークフロー

ここで、新機能やモジュールのリファクタリングに取り組みたいとしましょう。新しいブランチを作成できます。これを「機能」ブランチと呼びます。これには時間がかかり、コードが壊れる可能性があります。機能が「十分に安定」していて、本番環境に「より近く」移動したい場合は、機能ブランチをマージして開発します。マージ後にすべてのバグが分類され、コードがすべてのテストに合格したら、変更をマスターにプッシュします。

このすべてのプロセスの間に、あなたはひどいセキュリティバグを見つけます、それはすぐに修正されなければなりません。通常の「開発」ブランチよりも迅速に本番環境にプッシュされる変更を行うホットフィックスと呼ばれるブランチを持つことができます。

ここに、この機能/修正プログラム/開発/制作のワークフローがどのように見えるかを示す図があります(ブログの投稿でよく説明されています。繰り返しますが、ブログの投稿では、プロセス全体が私よりもはるかに詳細に説明されています。 。

Gitワークフローの例


私はgitの初心者ですが、この図は、それが作るより多くの私のために混乱します。
finnw

どちらが最初ですか、最後ですか。投稿を長くしすぎたくありませんでしたが、後で両方の図の簡単な説明を追加します。
アッシュウッド

記事全体をお読みください。私も、この図で混乱してしまったが、ブログの記事は非常によく書かれているnvie.com/posts/a-successful-git-branching-model
フェリペサビノを

今のほうがいいですか?ここではブログ投稿全体を再投稿するのではなく、大まかな概要を説明したかっただけです:)
ashwoods '13年

39

PJ Hyettの投稿のコピーです。もう利用できません。

Gitは難しくありません

2008年11月23日

SubversionではなくGitを使用する理由を説明すると、「GitはSubversionよりもSubversionの方が優れていますが、それだけではありません」と言っています。

「もっと多く」は、Gitを本当に輝かせる要素で構成されていますが、Subversionのような他のSCMから来ている人にとっては、かなり圧倒される可能性があります。

そうは言っても、移行中にSubversionを使用するのと同じように、Gitの使用を妨げるものは何もありません。

必要なソフトウェアがインストールされていて、リモートリポジトリがどこかにあるとすると、コードを取得してSubversionで変更をプッシュする方法は次のとおりです。

$ svn checkout svn://foo.googlecode.com/svn/trunk foo
# make your changes
$ svn commit -m "my first commit"

そして、どのようにGitでそれを行いますか?

$ git clone git@github.com:pjhyett/foo.git
# make your changes
$ git commit -a -m "my first commit"
$ git push

Gitでそれを実行するためのもう1つのコマンド。この追加のコマンドは大きな意味を持っていますが、この投稿の目的のために、これが私たちが話しているすべてのこと、1つの追加のコマンドです。

ほら、それほど難しいことではありません。

アップデート:私はまた、GitはあるにはSubversionでローカルコピーを更新するのと同等に比較することを言及しないように怠慢だろうsvn updategit pull、それぞれ。どちらの場合も、コマンドは1つだけです。


最初の例では、相対パスにチェックアウトして./fooいますが、get cloneにパスが指定されていません。どこにチェックアウトしますか?
JD Isaacks

33

Gitのインストール方法

Windowsの場合:

msysgitをインストールする

いくつかのダウンロードがあります:

  • Git:以下の他のオプションのいずれかが特に必要でない限り、これを使用してください。
  • PortableGit: PCにインストールせずにGitを実行したい場合に使用します(例:USBドライブからGitを実行)
  • msysGit: Git自体を開発する場合に使用します。あなただけのためにGitを使用したい場合は、あなたのソースコードが、編集したくないのGitのソースコードを、あなたはこれを必要としません。

これにより、Cygwin bashシェルもインストールされるため、git(cmd.exeよりも)より優れたシェルでを使用でき、git-gui(git guiコマンドまたはStart > All Programs > Gitメニューからアクセス可能)も含まれます

Mac OS X

git-osx-installerを使用するか、ソースからインストールすることもできます

パッケージマネージャー経由

gitネイティブパッケージマネージャーを使用してインストールします。たとえば、Debian(またはUbuntu)の場合:

apt-get install git-core

またはMac OS Xでは、MacPortsを介して:

sudo port install git-core+bash_completion+doc

…またはfink:

fink install git

…または自作

brew install git

FedoraなどのRed Hatベースのディストリビューション:

yum install git

Cygwinでは、Gitパッケージは「devel」セクションにあります

ソースから(Mac OS X / Linux / BSD / etc。)

Mac OS Xでは、開発者ツールがインストールされている場合、ソースからGitを非常に簡単にコンパイルできます。最新バージョンのGitをa .tar.bzまたはhttp://git-scm.com/.tar.gzからダウンロードします。解凍します(Finderでダブルクリックします)。

Linux / BSD / etc。それはほとんど同じでなければなりません。たとえば、Debian(およびUbuntu)では、次の方法でbuild-essentialパッケージをインストールする必要があります。apt

次に、ターミナルでcd、ファイルを抽出した場所(実行中cd ~/Downloads/git*/)で実行します。

./configure && make && sudo make install

これにより、Gitがデフォルトの場所にインストールされます(/usr/local-なのでgit/usr/local/bin/git

パスワード(の場合sudo)を入力するように求められます。これ/usr/local/により、「root」ユーザーのみがアクセスできるディレクトリに書き込むことができるため、sudoが必要になります。

別の場所にインストールする必要がある場合(Gitのファイルが他のツールと混合されないようにする場合)は--prefix、configureコマンドとともに使用します。

./configure --prefix=/usr/local/gitpath
make
sudo make install

これにより、gitバイナリがにインストールされ/usr/local/bin/gitpath/bin/gitます。そのため、毎回入力する必要はありません。$PATH次の行をに追加して、に追加する必要があります~/.profile

export PATH="${PATH}:/usr/local/bin/gitpath/bin/"

sudoアクセス権がない場合は、使用--prefix=/Users/myusername/binしてホームディレクトリにインストールできます。追加すること~/bin/を忘れないでください$PATH

スクリプトx-git-update-to-latest-versionは、この多くを自動化します。

このスクリプトは、gitリポジトリのローカルクローン~/work/track/git(の場所は)を更新してから、シンボリックリンクを構成、インストール(/usr/local/git- git describe)して更新します/usr/local/git

このように、私は/usr/local/git/bin私の中PATHで持つことができ、私は常に最新バージョンを使用しています。

このスクリプトの最新バージョンは、manページもインストールします。ディレクトリMANPATHを含めるには、微調整する必要があります/usr/local/git/share/man


5
Fedoraの場合:yum install git。GUI実行の場合yum install git-gui
クリスティアンCiupitu 2009

2
マック、オンsudo port install git-core+bash_completion+doc
Singletoned

Mac用のfinkをダウンロードしましたが、fink install gitを実行すると「Failed:no package found for specification 'git'!」というエラーが表示されます。
quano 2009

@quanoそこにあるはずです、pdb.finkproject.org / pdb / package.php / git -Finkが正しく更新されていることを確認してください-実行fink self-updateが役立つと思います
dbr

32

Gitリセット

プルを作成し、それをコードにマージして、気に入らないと判断したとします。git-logまたはtigを使用して、戻りたい場所のハッシュを見つけ(おそらくプル/マージの前の最後のコミット)、ハッシュをコピーして、次のようにします。

# Revert to a previous commit by hash:
git-reset --hard <hash>

ハッシュの代わりに、HEAD ^を以前のコミットのショートカットとして使用できます。

# Revert to previous commit:
git-reset --hard HEAD^

4
これは、他のほとんどの集中バージョン管理システムでの復帰に類似しています。
ジェレミーウォール

"$ git-reset --hard HEAD ^"は、headの親(つまり、最後のコミット前の以前の状態)の省略表現である必要があります。
ベンページ2009

6
普通の人だけがgit reset偶然にアンステージするはずですgit add
slf

31

共有チームリポジトリをどのように設定しますか?

ここでは、通常のリポジトリを設定する方法について説明しますが、誰でもプルおよびプッシュできるチームリポジトリをどのように設定しますか?

共有NFSファイルシステムの使用

たとえば、チームがすでに使用できる共有グループメンバーシップを持っているとします。

mkdir /your/share/folder/project.git
cd /your/share/folder/project.git
newgrp yourteamgroup # if necessary
git init --bare --shared

このリポジトリの使用を開始する最も簡単な方法は、すでに使用しているローカルリポジトリから開始することです。

cd your/local/workspace/project
git remote add origin /your/share/folder/project.git
git push origin master

他の人はこれを複製して作業を開始できます:

cd your/local/workspace
git clone /your/share/folder/project.git

SSHの使用

ターゲットサーバーにユーザーアカウントを設定します。パスワードなしのアカウントを使用するか、パスワード付きのアカウントを使用するか、または使用するauthorized_keysかは、実際に必要なセキュリティレベルに依存します。見てみましょうSSH経由での設定Gitのいくつかの詳細については、を。

すべての開発者がこの共有リポジトリへのアクセスに同じアカウントを使用する--shared場合、上記のオプションを使用する必要はありません。

上記と同じ方法でリポジトリを初期化した後、次のように最初のプッシュを実行します。

cd your/local/workspace/project
git remote add origin user@server:/path/to/project.git
git push origin master

上記との類似点をご覧ください。さらに、アカウントにパスワードが設定されている場合にSSHがパスワードを要求することもあります。パスワードのないアカウントでこのプロンプトが表示された場合、SSHサーバーはおそらく無効になっていますPermitEmptyPasswordsいる。

クローニングは次のようになります。

cd your/local/workspace
git clone user@server:/path/to/project.git

NFS以外-どのようにsshで動作するようにgitサーバーを設定しますか?-github.comの小規模なインスタンスのようですか?
Dafydd Rees

関連するディレクトリにグループスティッキービットを設定する必要がありますか、それともgitがすべてを処理しますか?後者の場合、gitはどのようにしてUnixファイルのアクセス許可で使用するグループを認識しますか?
ノーマンラムジー

リクエストに応じてSSHに関するセクションを追加しました。すべての開発者がプライマリグループとして共有グループを持っているわけではない場合は、スティッキービットが必要です。ユーザーのいずれかに別のプライマリグループがある場合、デフォルトでは、このグループの所有権でファイルを作成します。これはgitの下で発生するため、常にgitの制御下にあるとは限りません。
Asgeir S. Nilsen

git repo-config core.sharedRepositoryグループは何に役立ちますか?
systempuntoout 2010

28

git statusあなたの友達です、よく使ってください。次のような質問に答えるのに適しています。

  • そのコマンドは何をしたのですか?
  • 私はどの支店にいますか?
  • コミットしようとしている変更は何ですか?また、何かを忘れましたか?
  • このプロジェクトで最後に作業したのは何か(数日、数週間、またはおそらく数か月前)の途中でしたか?

たとえばとは異なり、大規模なプロジェクトでもほぼ瞬時svn statusgit status実行されます。gitを頻繁に使用するように学習しているときに、何が起こっているのかについての私のメンタルモデルが正確であることを確認することで、安心できることがよくありました。今はほとんどの場合、前回のコミット以降に何を変更したかを思い出させるために使用しています。

明らかに、あなたの.gitignoreがまともな設定されている場合、それははるかに便利です。


27

変更をコミット

ファイルを編集したら、変更をgitにコミットする必要があります。このコマンドを実行すると、コミットメッセージが要求されます。これは、変更した内容をすべての人に知らせる簡単なテキストです。

$ git commit source/main.c

ファイルmain.cをディレクトリ./source/にコミットします

$ git commit -a # the -a flag pulls in all modified files

変更されたすべてのファイルをコミットします(ただし、新しいファイルはコミットしません。これらはgit-addでインデックスに追加する必要があります)。特定のファイルのみをコミットする場合は、まずgit-addを使用してステージングし、次に-aフラグなしでコミットする必要があります。

コミットすると、ローカルリポジトリのみが変更され、リモートリポジトリは変更されません。コミットをリモートリポジトリに送信する場合は、プッシュを実行する必要があります。

$ git push <remote> <branch> # push new commits to the <branch> on the <remote> repository

CVSまたはSVNから来た人にとっては、中央リポジトリへのコミットに2つのステップが必要になるため、これは変更です。


27

どのように分岐しますか?

gitリポジトリのデフォルトのブランチはと呼ばれmasterます。

新しいブランチを作成するには

git branch <branch-name>

現在のリポジトリタイプのすべてのブランチのリストを表示するには

git branch

別のブランチに切り替えたい場合は、

git checkout <branch-name>

新しいブランチを作成し、1つのステップでブランチに切り替えるには

git checkout -b <branch-name>

ブランチを削除するには、

git branch -d <branch-name>

現在のブランチからの変更でブランチを作成するには、次のようにします

git stash
git stash branch <branch-name>

11
ブランチを作成して1つのステップでブランチに切り替えるショートカットgit checkout -b <branch-name>に言及する必要があります。これはおそらく、初心者や上級gitユーザーの最も一般的な使用例です。
Jeremy Wall、

21

最新のコードを入手する

$ git pull <remote> <branch> # fetches the code and merges it into 
                             # your working directory
$ git fetch <remote> <branch> # fetches the code but does not merge
                              # it into your working directory

$ git pull --tag <remote> <branch> # same as above but fetch tags as well
$ git fetch --tag <remote> <branch> # you get the idea

これで、リモートリポジトリからコードの最新コピーを取得するすべてのケースがカバーされます。



18

Git Magicはあなたが必要とするすべてのものです。保証または返金。


14
ため息、お金を返してほしい。不完全なチュートリアル(GitMagic)があるバギーソフトウェア(msysGit)==作業時間、ほとんど無料
SamGoody 2009

16

ブランチをどのようにマージしますか?

あなたが(例えばブランチをマージする場合masterrelease)、必ずあなたの現在のブランチがターゲットブランチであなたにマージする(利用希望作るgit branchか、git statusあなたの現在のブランチを見て)。

次に使用します

git merge master

masterは、現在のブランチとマージするブランチの名前です)。

競合がある場合は、

git diff

解決する必要がある保留中の競合を確認する。


2
お気に入りのツール(gvimdiff、kdiff3など)で3者間差分を実行するgit mergetoolがあります
Dave Vogt



12

リモートブランチを追跡する方法

ローカルリポジトリのクローンを作成したリモートリポジトリがあり、そのリモートリポジトリに「some_branch」という名前のブランチがあると仮定して、ローカルで追跡する方法を次に示します。

# list remote branches
git branch -r

# start tracking one remote branch
git branch --track some_branch origin/some_branch

# change to the branch locally
git checkout some_branch

# make changes and commit them locally
....

# push your changes to the remote repository:
git push

git 1.7では、リモートブランチからローカルブランチを作成すると、リモートブランチが自動的に追跡されるようです。この動作がどのバージョンで始まったかはわかりません。
Doppelganger、2010

実際には、次のgit remote show REMOTENAME
コマンド


10

ファイルの2つのリビジョン、または現在のファイルと以前のリビジョンをどのように比較しますか?

比較コマンドはgit diffです。

ファイルの2つのリビジョンを比較するには:

$ git diff <commit1> <commit2> <file_name>

これはcommit1とcommit2を比較します。順序を変更すると、ファイルは逆方向に差分されます。これは、期待とは異なる場合があります...

現在のステージングファイルをリポジトリと比較するには:

$ git diff --staged <file_name>

現在のステージされていないファイルをリポジトリと比較するには:

$ git diff <file_name>

9

なぜまた別の方法ですか?始めるのに最適なgitガイドのように、ネット上には本当に良いものがあります。git bookを含む良いリンクがあります貢献できる(gitハブでホストされている)をがあり、この集合的なタスクに最適です。

Stackoverflowで、私はあなたのお気に入りのトリックを見たいです。

私が最近発見した鉱山はgit stashここで説明されています。これにより、現在のジョブを保存して別のブランチに移動できます

編集:以前の投稿と同じように、wikiとして投稿を含むスタックオーバーロー形式を本当に好む場合は、この回答を削除します


いいえ、削除しません。あなたの答えは完全に有効です-そして、良いリソースを他の人に向けることは悪いことではありません。ここにリストされている最も一般的な操作も必要ですが、それは少しの作業であり、他の人が行うことは期待していません。私は学びながら時間をかけてそれを行い、これは私にとっての参考になります。
アダムデービス

9

コンソールUI-Tig

インストール:

apt-get install tig

使用法

gitリポジトリ内で「tig」と入力し、対話型ログを表示するには、ログで「Enter」を押して詳細を確認します。hヘルプを表示します。基本的な機能が一覧表示されています。

トリビア

「Tig」は「Git」の逆です。


「コンソール」と「グラフィカル」は少し矛盾しているので、「コンソールUI」である必要はありませんか?
dbr 2008年

それはgit-logよりもはるかにグラフィカルです...しかし、それははるかに多くのインターフェースです...
Dean Rather

8

リモートリポジトリにブランチを作成するにはどうすればよいですか?

いくつかの単一のリモートリポジトリからリモートリポジトリのクローンを作成したと仮定します。

# create a new branch locally
git branch name_of_branch
git checkout name_of_branch
# edit/add/remove files    
# ... 
# Commit your changes locally
git add fileName
git commit -m Message
# push changes and new branch to remote repository:
git push origin name_of_branch:name_of_branch

11
なぜname_of_branch:name_of_branchなのか?
Seun Osewa

はい、なぜですか?私が知る限り、必要なのgit push origin name_of_branchはブランチだけで、すでにリモートに作成されます
Felipe Sabino '13年

1つ目name_of_branchはローカル名、2つ目は(必要な)リモートブランチ名です。したがってlocal_name_of_branch:remote_name_of_branch、名前を異なるものにする場合もあります。それらを同じにしたい場合は、このように指定する必要があります。このように指定しない限り、gitは名前を同じにすることを想定していません(同じようにする他の方法もあります)。ただし)
ジョニー

8

私は公式のGitチュートリアルから始めました。私はそれが初心者にとって十分実用的だと思います(私はあなたの定義により、初心者であり、今もそうですが、私はほとんどメイクファイルを把握していません。


8

リモートリポジトリのブランチを削除するにはどうすればよいですか?

:ブランチの名前の前に使用してリモートでプッシュを実行します

git push origin :mybranchname

originあなたのリモートの名前とmybranchname削除されようとしているブランチの名前

http://help.github.com/remotes/


7

変更のプッシュおよびプル

簡単な方法では、ただやるgit pushgit pull。変更はマージされ、競合がある場合はgitから通知され、手動で解決できます。

最初にリモートリポジトリにpushするとき、git push origin master(masterがmasterブランチである)を実行する必要があります。それ以降は、を実行するだけですgit push

でタグをプッシュしますgit push --tags


7

コードのチェックアウト

最初に空のディレクトリに移動し、「git init」を使用してそれをリポジトリにしてから、リモートリポジトリを自分のリポジトリに複製します。

git clone user@host.com:/dir/to/repo

最初のクローン元はどこでも、「git pull」はデフォルトでそこからプルします。


7
最初にinitを実行する必要をなくすために、クローンはinitステップを実行すると思います。git initは、ほとんどの場合、最初のリポジトリを作成するため、または標準のクローンとは異なる設定をしたい複数のリモートを使用する特別な構成のためのものです。
ジェレミーウォール

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.