ユーザ用ツール

サイト用ツール


git

差分

このページの2つのバージョン間の差分を表示します。

この比較画面へのリンク

両方とも前のリビジョン前のリビジョン
次のリビジョン
前のリビジョン
git [2019/11/25 16:22] – [ブランチ] nullpongit [2022/07/13 12:08] (現在) – [ブランチ作る場所間違った] 削除 nullpon
行 1: 行 1:
 ====== Git ====== ====== Git ======
-[[http://git-scm.com/|Git]]は、フリーでオープンソースのバージョンコントロールシステム。Linuxのカーネル開発のためにLinus Torvaldsによって開発された。現在の[[Rails]]など有名なプロダクトの開発もGitを使って行われており、人気が高まっている+[[http://git-scm.com/|Git]]は、フリーでオープンソースのバージョンコントロールシステム。Linuxのカーネル開発のためにLinus Torvaldsによって開発された。
  
   * [[git:publishing|Gitで公開]]   * [[git:publishing|Gitで公開]]
 ===== インストール ===== ===== インストール =====
 ==== Debian系 ==== ==== Debian系 ====
-  sudo aptitude install git-core+  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 <path/to/target> 
 + 
 +ステージ(コミット対象)に追加 
 + 
 +  git add <path/to/target>
  
 ステージに追加したファイルをステージから外す ステージに追加したファイルをステージから外す
-  git reset HEAD ファイルorディレクトリのパス 
  
-コミット+  git restore --staged <path/to/target> 
 + 
 +ステージに追加したファイルをコミット 
   git commit   git commit
      
-変更されたファイルを全部対象してコミット(新しく作成したファイルは対象にならないので個別にadd+変更たファイルをステージ上げずに直接コミット(新ファイルは直接コミットできない) 
   git commit -a   git commit -a
-   +
-最後にコミットしたバージョンに戻す(svnのrevert) +
-  git checkout ファイルorディレクトリのパス+
  
 ===== config ===== ===== config =====
行 75: 行 83:
 と書ける。 と書ける。
  
-===== リポジトリの公開 ===== 
-サーバ上に公開リポジトリを設置する。 
- 
-サーバ上の /var/git/repo/hoge.git というディレクトリ(ディレクトリ名は必ず 〜.git という名前にすること)で 
-  $ git --bare init  
- 
-hoge.gitが公開ディレクトリとなる。bareリポジトリはワーキングディレクトリとして使えない。 
- 
-現在作業中のリポジトリからbareリポジトリを作成する場合は、以下のようにクローンを作成。 
-  $ git --bare clone project project.git 
-  
-作成したbareリポジトリをサーバに設置し、以下のコマンドを実行  
-  $ git update-server-info 
-   
-Webサーバ上の公開リポジトリからcloneやpullできる。 
-  $ git clone http://paulownia.jp/repo/hoge.git 
- 
-pushしたいならssh経由でクローンするのが楽。 
-  $ git clone ssh://nullpon@paulownia.jp/var/git/repo/hoge.git 
- 
-pushされた内容はpushしただけではbareリポジトリに反映されない。pushする度にupdate-server-infoする必要がある。これをpush時に自動で実行するにはhoge.git/hooksにある post-update.sample をpost-updateにリネームして実行権限を付加する。 post-update.sample はシェルスクリプトで update-server-info のコマンドが書いてある。 
  
 ===== push ===== ===== push =====
行 186: 行 173:
 とする。 とする。
  
-===== Eclipseで使う ===== 
-[[http://www.eclipse.org/egit/|EGit]]プラグインをインストール 
  
-==== Windows ==== 
-Puttyで鍵を生成している場合は秘密鍵をOpenSSH形式に変換しておく。 
  
-以下の設定を開く 
-  メニュー -> Window -> Preference -> General -> Network Connections -> SSH -> General  
- 
-SSH2 HOMEのディレクトリに秘密鍵を置くか、ディレクトリを変更する。''add private key'' で設置した秘密鍵を追加する。 
- 
-git pullのやり方が分からん… 
- 
-===== msysgit ===== 
-Windows用のクライアント。Git Bashというシェル環境がインストールされ、コマンドでGitを操作できる。貧弱ながらGit GUIというGUIアプリも用意されている(WindowsのGUI環境で本格利用するならば、別途TortoiseGitを入れるとよい)。 
- 
-[[http://code.google.com/p/msysgit/|msysgit - Git for Windows - Google Project Hosting]] 
- 
-Cygwin利用者は、msysgitを使わずCygwin環境からGitをインストールするのが良い。 
- 
-==== SSHでリモートリポジトリにアクセス ==== 
-インストール時にOpenSSHを使うか、TortoisePLinkを使うか聞かれる。既にTortoiseSVNを使っているかTortoiseGitを使うならばTortoisePLinkを使うとよい。 
- 
-TortoisePLinkを選択した場合は、Puttyをインストールしておき、あらかじめセッションの設定を保存しておく。例えばmyhomeserverという名前でPuttyのセッションを保存し、Git Bashで 
- 
-  $ git clone ssh://myhomeserver/path/to/repo.git 
- 
-でクローンできる。SSHログインユーザの指定、公開鍵、ポートの設定などはPuttyセッションで指定すると良い。 
  
  
行 258: 行 219:
   $ git diff コミット名1 コミット名2 -- ファイル名     $ git diff コミット名1 コミット名2 -- ファイル名  
      
-キングツリーではなくンデックスと比較する場合はcachedオプション付ける。+ステジに上げられたファルの差分表示
  
-  $ git diff --cached  +  $ git diff --staged  
 +  $ git diff --cached
      
 スペース・タブの変更を無視してdiff結果を出す スペース・タブの変更を無視してdiff結果を出す
行 303: 行 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 'refs/heads/*:refs/heads/*' 
 +===== イベントフック ===== 
 + 
 +pushの前にコードフォーマットチェックし、ダメな場合はpushを中止する 
 + 
 +テンプレがあるのでコピー 
 + 
 +<code shell> 
 +cp .git/hook/pre-push.sample .git/hook/pre-push 
 +</code> 
 + 
 +.git/hook/pre-pushを以下のように変更 
 + 
 +<code> 
 +#!/bin/sh 
 + 
 +remote="$1" 
 +url="$2" 
 + 
 +z40=0000000000000000000000000000000000000000 
 + 
 +while read local_ref local_sha remote_ref remote_sha 
 +do 
 +    if [ "$local_sha" = $z40 ] 
 +    then 
 +        # Handle delete 
 +        : 
 +    else 
 +        if [ "$remote_sha" = $z40 ] 
 +        then 
 +            # New branch, examine all commits 
 +            range="$local_sha" 
 +        else 
 +            # Update to existing branch, examine new commits 
 +            range="$remote_sha..$local_sha" 
 +        fi 
 + 
 +        # Check for WIP commit 
 +        commit=`git rev-list -n 1 --grep '^WIP' "$range"
 +        if [ -n "$commit"
 +        then 
 +            echo >&2 "Found WIP commit in $local_ref, not pushing" 
 +            exit 1 
 +        fi 
 + 
 +        ## scalaの例、ここを追加! 
 +        sbt scalafmtCheck test:scalafmtCheck scalafmtSbtCheck 
 +        status=$? 
 +        if [ $status -ne 0 ]; then 
 +            exit $status 
 +        fi 
 +    fi 
 +done 
 + 
 +exit 0 
 +</code>
  
git.1574698943.txt.gz · 最終更新: 2019/11/25 16:22 by nullpon