git
差分
このページの2つのバージョン間の差分を表示します。
両方とも前のリビジョン前のリビジョン次のリビジョン | 前のリビジョン | ||
git [2015/07/27 03:35] – nullpon | git [2022/07/13 12:08] (現在) – [ブランチ作る場所間違った] 削除 nullpon | ||
---|---|---|---|
行 1: | 行 1: | ||
====== Git ====== | ====== Git ====== | ||
- | [[http:// | + | [[http:// |
* [[git: | * [[git: | ||
===== インストール ===== | ===== インストール ===== | ||
==== Debian系 ==== | ==== Debian系 ==== | ||
- | sudo aptitude | + | sudo apt install git |
==== MacOSX ==== | ==== MacOSX ==== | ||
行 13: | 行 13: | ||
またはbrewで | またはbrewで | ||
brew install git | brew install git | ||
- | ===== 個人でバージョン管理 | + | ===== 基本的な使い方 |
- | GitはSVNのようにサーバ上のリポジトリを必要としない。ワーキングディレクトリがGitのリポジトリになる。 | + | |
+ | gitリポジトリを作成 | ||
+ | |||
+ | mkdir my_project | ||
cd my_project | cd my_project | ||
git init | git init | ||
- | コミット対象(ステージ)に追加 | + | 変更したファイルをコミット時の状態に戻す |
- | git add ファイルorディレクトリのパス | + | |
+ | git restore < | ||
+ | |||
+ | ステージ(コミット対象)に追加 | ||
+ | |||
+ | git add < | ||
ステージに追加したファイルをステージから外す | ステージに追加したファイルをステージから外す | ||
- | git reset HEAD ファイルorディレクトリのパス | ||
- | コミット | + | git restore --staged < |
+ | |||
+ | ステージに追加したファイルをコミット | ||
git commit | git commit | ||
| | ||
- | 変更されたファイルを全部対象にしてコミット(新しく作成したファイルは対象にならないので個別にadd) | + | 変更したファイルをステージに上げずに直接コミット(新規ファイルは直接コミットできない) |
git commit -a | git commit -a | ||
- | + | ||
- | 最後にコミットしたバージョンに戻す(svnのrevert) | + | |
- | git checkout ファイルorディレクトリのパス | + | |
===== config ===== | ===== config ===== | ||
行 75: | 行 83: | ||
と書ける。 | と書ける。 | ||
- | ===== リポジトリの公開 ===== | ||
- | サーバ上に公開リポジトリを設置する。 | ||
- | |||
- | サーバ上の / | ||
- | $ git --bare init | ||
- | |||
- | hoge.gitが公開ディレクトリとなる。bareリポジトリはワーキングディレクトリとして使えない。 | ||
- | |||
- | 現在作業中のリポジトリからbareリポジトリを作成する場合は、以下のようにクローンを作成。 | ||
- | $ git --bare clone project project.git | ||
- | |||
- | 作成したbareリポジトリをサーバに設置し、以下のコマンドを実行 | ||
- | $ git update-server-info | ||
- | | ||
- | Webサーバ上の公開リポジトリからcloneやpullできる。 | ||
- | $ git clone http:// | ||
- | |||
- | pushしたいならssh経由でクローンするのが楽。 | ||
- | $ git clone ssh:// | ||
- | |||
- | pushされた内容はpushしただけではbareリポジトリに反映されない。pushする度にupdate-server-infoする必要がある。これをpush時に自動で実行するにはhoge.git/ | ||
===== push ===== | ===== push ===== | ||
行 146: | 行 133: | ||
$ git fetch origin hogehoge: | $ git fetch origin hogehoge: | ||
$ git checkout hogehoge | $ git checkout hogehoge | ||
- | ===== svnから移行 ===== | + | |
- | [[git-svn]]を使う | + | |
===== ブランチ ===== | ===== ブランチ ===== | ||
ブランチ一覧を見る | ブランチ一覧を見る | ||
git branch | git branch | ||
- | ブランチ作成 | + | リモートブランチ一覧 |
- | git branch ブランチ名 | + | git branch |
+ | |||
+ | originで削除されているリモートブランチを掃除する | ||
+ | git remote prune origin | ||
+ | |||
+ | 今のブランチにマージ済みのブランチ一覧 | ||
+ | git branch --merged | ||
ブランチ切り替え | ブランチ切り替え | ||
- | git checkout | + | git switch ブランチ名 |
+ | |||
+ | 新しいブランチを作成して切り替え | ||
+ | git switch -c ブランチ名 | ||
ブランチの削除 | ブランチの削除 | ||
- | git branch -d ブランチ名 (他のブランチにマージしないと削除できない) | + | git branch -d ブランチ名 (--mergedでリストされないブランチは削除されない) |
- | git branch -D ブランチ名 (マージされていないブランチを強制削除) | + | git branch -D ブランチ名 (--mergedでリストされないブランチも強制削除) |
ブランチの名前変更 | ブランチの名前変更 | ||
行 166: | 行 161: | ||
マージの仕方(ブランチhogeをmasterにマージ) | マージの仕方(ブランチhogeをmasterにマージ) | ||
- | git checkout | + | git switch |
git diff hoge (差分の確認) | git diff hoge (差分の確認) | ||
git merge hoge | git merge hoge | ||
行 178: | 行 173: | ||
とする。 | とする。 | ||
- | ===== Eclipseで使う ===== | ||
- | [[http:// | ||
- | ==== Windows ==== | ||
- | Puttyで鍵を生成している場合は秘密鍵をOpenSSH形式に変換しておく。 | ||
- | 以下の設定を開く | ||
- | メニュー -> Window -> Preference -> General -> Network Connections -> SSH -> General | ||
- | |||
- | SSH2 HOMEのディレクトリに秘密鍵を置くか、ディレクトリを変更する。'' | ||
- | |||
- | git pullのやり方が分からん… | ||
- | |||
- | ===== msysgit ===== | ||
- | Windows用のクライアント。Git Bashというシェル環境がインストールされ、コマンドでGitを操作できる。貧弱ながらGit GUIというGUIアプリも用意されている(WindowsのGUI環境で本格利用するならば、別途TortoiseGitを入れるとよい)。 | ||
- | |||
- | [[http:// | ||
- | |||
- | Cygwin利用者は、msysgitを使わずCygwin環境からGitをインストールするのが良い。 | ||
- | |||
- | ==== SSHでリモートリポジトリにアクセス ==== | ||
- | インストール時にOpenSSHを使うか、TortoisePLinkを使うか聞かれる。既にTortoiseSVNを使っているかTortoiseGitを使うならばTortoisePLinkを使うとよい。 | ||
- | |||
- | TortoisePLinkを選択した場合は、Puttyをインストールしておき、あらかじめセッションの設定を保存しておく。例えばmyhomeserverという名前でPuttyのセッションを保存し、Git Bashで | ||
- | |||
- | $ git clone ssh:// | ||
- | |||
- | でクローンできる。SSHログインユーザの指定、公開鍵、ポートの設定などはPuttyセッションで指定すると良い。 | ||
行 250: | 行 219: | ||
$ git diff コミット名1 コミット名2 -- ファイル名 | $ git diff コミット名1 コミット名2 -- ファイル名 | ||
| | ||
- | ワーキングツリーではなくインデックスと比較する場合はcachedオプションを付ける。 | + | ステージに上げられたファイルの差分を表示 |
- | $ git diff --cached | + | $ git diff --staged |
+ | $ git diff --cached | ||
| | ||
スペース・タブの変更を無視してdiff結果を出す | スペース・タブの変更を無視してdiff結果を出す | ||
行 295: | 行 265: | ||
$ git log --committer=nullpon | $ git log --committer=nullpon | ||
- | ===== コミットを並び替える ===== | ||
- | $ git rebase -i HEAD~3 | ||
- | | ||
- | こんな画面が出てくる、 | ||
- | pick xxxxxxxx コミット1 | ||
- | pick xxxxxxxx コミット2 | ||
- | pick xxxxxxxx コミット3 | ||
- | | ||
- | コミット1が古い方。 | ||
- | pick xxxxxxxx コミット1 | ||
- | pick xxxxxxxx コミット3 | ||
- | pick xxxxxxxx コミット2 | ||
- | |||
- | コミット2と3を入れ替えて保存。 | ||
- | ===== 複数のコミットをまとめる ===== | ||
- | たとえば3つ前までのコミットを1つにまとめる(まとめる、というよりも新しいコミットを古いコミットに含めるというのが正しい) | ||
- | $ git rebase -i HEAD~3 | + | ===== 特定のファイルを過去の時点に戻す ===== |
- | + | ||
- | こんな画面が出てくる | + | |
- | pick xxxxxxxx コミット1 | + | `restore -s`を使う |
- | pick xxxxxxxx コミット2 | + | |
- | pick xxxxxxxx コミット3 | + | |
- | + | ||
- | コミット1が古い方。 | + | |
- | pick xxxxxxxx | + | 指定したファイルをコミット`aaaa`の変更前に戻す |
- | s xxxxxxxx コミット2 | + | |
- | s xxxxxxxx コミット3 | + | |
- | + | ||
- | コメント修正画面が出てくるので、適当にコメントを直して保存するとまとまる。止めたいときはコメント全部消して終了し、git rebase --abort | + | |
- | ===== ブランチ作る場所間違った ===== | + | git restore -s aaaa^ 戻したいファイルのパス |
+ | |||
+ | git rmされたファイルを復元するときも同様。 | ||
- | hotfix/aaa からブランチを作るべきなのに master から作ってコミットしまった… | ||
- | git rebase --onto hotfix/aaa master | + | ===== bareリポジトリの同期 ===== |
- | | + | |
+ | bareリポジトリのoriginに強制的に同期させる(origin側のrebaseに追従させる) | ||
+ | |||
+ | git fetch -f origin ' | ||
+ | ===== イベントフック ===== | ||
+ | |||
+ | pushの前にコードフォーマットチェックし、ダメな場合はpushを中止する | ||
+ | |||
+ | テンプレがあるのでコピー | ||
+ | |||
+ | <code shell> | ||
+ | cp .git/ | ||
+ | </ | ||
+ | |||
+ | .git/ | ||
+ | |||
+ | < | ||
+ | #!/bin/sh | ||
+ | |||
+ | remote=" | ||
+ | url=" | ||
+ | |||
+ | z40=0000000000000000000000000000000000000000 | ||
+ | |||
+ | while read local_ref local_sha remote_ref remote_sha | ||
+ | do | ||
+ | | ||
+ | then | ||
+ | # Handle delete | ||
+ | : | ||
+ | else | ||
+ | if [ " | ||
+ | then | ||
+ | # New branch, examine all commits | ||
+ | range=" | ||
+ | else | ||
+ | # Update to existing branch, examine new commits | ||
+ | range=" | ||
+ | fi | ||
+ | |||
+ | # Check for WIP commit | ||
+ | commit=`git rev-list -n 1 --grep ' | ||
+ | if [ -n " | ||
+ | then | ||
+ | echo >&2 "Found WIP commit in $local_ref, not pushing" | ||
+ | exit 1 | ||
+ | fi | ||
+ | |||
+ | ## scalaの例、ここを追加! | ||
+ | sbt scalafmtCheck test: | ||
+ | status=$? | ||
+ | if [ $status -ne 0 ]; then | ||
+ | exit $status | ||
+ | fi | ||
+ | fi | ||
+ | done | ||
+ | |||
+ | exit 0 | ||
+ | </ | ||
git.1437968121.txt.gz · 最終更新: 2015/07/27 03:35 by nullpon