20200301のGitに関する記事は9件です。

Rails 5.2~ credentials.yml.enc/master.key の扱いについて(備忘録)

credentials.yml.enc / master.keyとは何か

Rails 5.2 ~ からはsecret.ymlが廃止され、credentials.yml.enc / master.keyが導入されました。credentials.ymlはmaster.keyによって暗号化、復号化されます。secret.ymlは暗号化されておりませんでしたので、セキュリティ的にはより強固なものとなったようです。

特徴

  • Rails 5.2 ~
  • credentials.yml.encはmaster.keyとペアであり、master.keyによって暗号化されている。
  • credentials.yml.enc, master.key共にデフォルトでgitignoreに追加されている。

編集及び取得方法

編集方法

$ cd [アプリケーションのディレクトリ]
$ sudo EDITOR=vim bin/rails credentials:edit

初めてこのコマンドを叩くとcredentials.yml.encとmaster.keyのペアが自動生成されます。
編集コマンドを叩いて次のような画面が出てきたらOK

# aws:
#   access_key_id: 123
#   secret_access_key: 345

# Used as the base secret for all MessageVerifiers in Rails, including the one protecting cookies.
secret_key_base: *******************************************************

ここにAWSやその他のサービスを使う際に必要となるaccess_key_id, secret_access_keyの情報を入力する。

aws:
  access_key_id: ***
  secret_access_key: ***

# Used as the base secret for all MessageVerifiers in Rails, including the one protecting cookies.
secret_key_base: *******************************************************

取得方法

credentials.yml.encに書き込んだ情報はmaster.keyによって復号化され取得されます。その際の取り出し方について。

Rails.application.credentials.***

例 AWSの場合

Rails.application.credentials.aws[:access_key_id]  # アクセスキーID
Rails.application.credentials.aws[:secret_access_key] # シークレットアクセスキー

実際に取得できるか試してみる

credentials.yml.encに入力した情報の取得が成功しているかを判定する際に非常に便利なコマンドがあります。

$ rails c
$ [1] pry(main) > Rails.application.credentials.aws
$ => { :access_key_id=>"123", :secret_access_key=>"456" }

このように表示されていればOK!

チーム開発におけるcredentials.yml.encとmaster.keyの扱いについて

チーム開発においては、master.keyを信頼できる開発メンバーにファイル共有ソフト等を用いて共有します。credentials.yml.encは本番環境にデプロイしてもmaster.keyによって暗号化されているため問題ありません。
本番環境ではmaster.keyを絶対にアップロードしないで下さい。

本番環境でのmaster.keyの値を取得方法

本番環境にはmaster.keyは当然アップロードすることは出来ません。代わりに環境変数に設定してcredentials.yml.encを復号化します。

$ cd ~   #本番環境
$ sudo vim /etc/environment  #環境変数の設定

環境変数は必ず、RAILS_MASTER_KEYとして設定して下さい。
また、デフォルトでcredentials.yml.encはgitignoreに追加されてしまっているので、この記述をコメントアウトします。

 .gitignore
 # config/credentials.yml.enc
 config/master.key   #マスターキーは絶対にgit addしない。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Git初心者がインストールしてコミットできるまでの流れ【Windows編】

当方知識ゼロの初心者で、ネットで調べながらGitでコミットできるまで挑戦したら2~3時間ぐらいかかってやや苦戦?したので同じステップを踏まないために、自分メモと誰かのためになればと

できるだけ細かいこと省いて、可読性を上げたいので今回は実践したWindows10の環境を対象。

事前準備

インストールについては割愛。一応リンク↓

imgGit for Windowsgit-for-windows.github.io))

インストールできたら、Git Bash起動。

最初にやること

まずはインストールできてるか確認

$ git --version
git version 2.25.1.windows.1

ユーザ名とメアドの設定

$ git config --global user.name "ユーザ名"
$ git config --global user.email メアド

以下のコマンドで確認

$ git config --list 
...
...
user.name= ユーザ名 
user.email= メアド

SSHキー取得

リモートリポジトリとやり取りするためにSSHのカギが必要らしい。

SSHキー作成

※GitHubに登録しているEmailアドレスを使うのが一般的らしい

$ ssh-keygen -t rsa -b 4096 -C "メアド"

SSH Keysの保存先を聞かれているので、特に気にしなければそのままEnterを入力。

Enter file in which to save the key (/Users/you/.ssh/id_rsa): [Press enter]

ここで生成されるファイル名は上記のコマンドなら

id_rsaid_rsa.pubのはず。それ以外ならおかしい。自分は暗号のようなファイル名になったので何回かやり直した。

*よくわからんファイル出ても削除すれば問題なし。

パスフレーズ入力

Enter passphrase (empty for no passphrase): [Type a passphrase] # Enter same passphrase again: [Type passphrase again]

*ちなみに色々な記事で生成されたファイルにパーミッション設定するよう言われる(chmod 600のコマンド)がWindowsの場合いらない

Windowsでchmodは実行できないと書きましたが、元々Windowsでは他のユーザアカウントのデータは(管理者権限が無い限り)見えないようアクセス制御されていますので、「秘密鍵のパーミッション変更」は実行しないままで大丈夫です。

SSHのconfigファイル設定

GitHubへSSH接続する際に、どの秘密鍵を指定するのかを管理するのが目的。以下の内容を.ssh/config(拡張子なし)に記述。なければ作る。

Host github
  HostName github.com
  User git
  IdentityFile ~/.ssh/id_rsa

GitHubのアカウントに公開鍵を登録

アカウント持ってなければ作る。ここも割愛。一応リンク↓

imgHow people build software · GitHub

リポジトリ作成

*リポジトリ持ってたら大丈夫

アカウント作ったらリポジトリ作成。

​ 自分のアカウントのページ行ってリポジトリのタブでNew押す。

  1. ​ リポジトリ名書いて
  2. ​ Public or Private 選択
  3. ​ Initialize this repository with a README に任意でチェック入れたら
  4. ​ Create repository クリック 20170130132949.png

公開鍵を登録する

  1. id_rsa.pubの中身をコピー

  2. 右上のメニューから Settings を選択

  3. gitのプロフィール画面の左側メニューSSH and GPG keys
    20170130132834.png

  4. New SSH keyをクリックして登録

ー「Title」はPC名とか自分がわかりやすいやつで

ー「Key」には、先ほどコピーした公開鍵の値をそのまま貼り付けます。

で、「Add SSH key」をクリック

これでSSH接続の設定おわり

SSH接続できるか確認

SSHのconfigファイルを設定したので、以下のように「github」と指定するだけで、記載したホスト名、ユーザー名、秘密鍵が自動的に使われます。

$ ssh github

以下のようなやつでたら、GitHub's SSH key fingerprintsにあるfingerprintsと一致するのを確認したらyes

The authenticity of host 'github.com (52.69.186.44)' can't be established.
RSA key fingerprint is SHA256:nThbg6kXUpJWGl7E1IGOCspRomTxdCARLviKw6E5SY8.
Are you sure you want to continue connecting (yes/no/[fingerprint])?

これがでればOK

Hi username! You've successfully authenticated, but GitHub does not # provide shell access.

いよいよGit使おう

作業ディレクトリ作成

$ mkdir git
$ cd git

おっと、ここで初心者の私が即席で調べて理解したgitの作業イメージを共有して進めたほうが親切そうだな

作業イメージ

ローカルリポジトリ(自分のパソコン内のリポ)とリモートリポジトリ(ネット上のリポ)ってのがあって

ステージング : どれを保存するか選ぶ
コミット:ローカルに保存
プッシュ:サーバに保存
マージ:Masterに更新

無題.png

ちなみに
プル : サーバからデータをローカルにロードする

(何か違えば教えてください)

リポジトリをローカルにCloneする

リポジトリをさっき作った作業ディレクトリ(ローカル)にクローンする。

GitHubのリポジトリのページから Clone or download をクリックして、今回は Use SSH を選択。

git@github.com:【ユーザー名】/【リポジトリ名】.git」という文字列をコピー
20170130132923.png

コピーしたやつを書きコマンド git clone のあとに張り付けてCloneする

$ git clone git@github.com:【ユーザー名】/【リポジトリ名】.git 
Cloning into '【リポジトリ名】'... remote: Counting objects: 3, done. remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 0 Receiving objects: 100% (3/3), done.

これで自分のディレクトリにファイルが入ってる

お次はリポジトリに移動してそのまま編集してコミットまでしたい気持ちはあるが、通常はMasterブランチにコミットすることはなく、ローカルで作業用のブランチを作って、そこで弄ったものをローカルで保存(コミット)してサーバにあげる(プッシュする)らしいのでそれをやる。

ブランチ作る

$ cd 【リポジトリ】
$ git checkout -b ブランチ名       #開発用のブランチを作成
Switched to a new branch 'ブランチ名'

*リポジトリのディレクトリの中には管理したいファイルを置いとく。以下で確認。

$ ls -l

ファイルをステージング

コミットしたいやつをステージング

$ git add 対象ファイル 

ちなみに取り消したいときは

$ git reset HEAD 対象ファイル

ローカルにコミット

ステージングされたやつをローカルに保存

コミットメッセージはおまかせ

$ git commit -m "コミットメッセージ"
[develop 77a190e] test commit
 1 file changed, 46 insertions(+), 5 deletions(-)

GitHubにプッシュ

下記コマンドでGitHubにプッシュします。

$ git push -u origin develop

#パスワードうったりして、なんか表示される

 * [new branch]      develop -> develop
Branch 'develop' set up to track remote branch 'develop' from 'origin'.

これがでたらおわり。

あとはGitHubを見に行ったら更新されてるのを確認。
お疲れ様です。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Git初心者がインストールしてコミットできるまで【Windows編】

当方知識ゼロの初心者で、ネットで調べながらGitでコミットできるまで挑戦したら2~3時間ぐらいかかってやや苦戦?したので同じステップを踏まないために、自分メモと誰かのためになればと

できるだけ細かいこと省いて、可読性を上げたいので今回は実践したWindows10の環境を対象。

事前準備

インストールについては割愛。一応リンク↓
imgGit for Windowsgit-for-windows.github.io))
インストールできたら、Git Bash起動。

最初にやること

まずはインストールできてるか確認

$ git --version
git version 2.25.1.windows.1

ユーザ名とメアドの設定

$ git config --global user.name "ユーザ名"
$ git config --global user.email メアド

以下のコマンドで確認

$ git config --list 
...
...
user.name= ユーザ名 
user.email= メアド

SSHキー取得

リモートリポジトリとやり取りするためにSSHのカギが必要らしい。

SSHキー作成

※GitHubに登録しているEmailアドレスを使うのが一般的らしい

$ ssh-keygen -t rsa -b 4096 -C "メアド"

SSH Keysの保存先を聞かれているので、特に気にしなければそのままEnterを入力。

Enter file in which to save the key (/Users/you/.ssh/id_rsa): [Press enter]

ここで生成されるファイル名は上記のコマンドなら

id_rsaid_rsa.pubのはず。それ以外ならおかしい。自分は暗号のようなファイル名になったので何回かやり直した。

*よくわからんファイル出ても削除すれば問題なし。

パスフレーズ入力

Enter passphrase (empty for no passphrase): [Type a passphrase] # Enter same passphrase again: [Type passphrase again]

*ちなみに色々な記事で生成されたファイルにパーミッション設定するよう言われる(chmod 600のコマンド)がWindowsの場合いらない

Windowsでchmodは実行できないと書きましたが、元々Windowsでは他のユーザアカウントのデータは(管理者権限が無い限り)見えないようアクセス制御されていますので、「秘密鍵のパーミッション変更」は実行しないままで大丈夫です。

SSHのconfigファイル設定

GitHubへSSH接続する際に、どの秘密鍵を指定するのかを管理するのが目的。以下の内容を.ssh/config(拡張子なし)に記述。なければ作る。

Host github
  HostName github.com
  User git
  IdentityFile ~/.ssh/id_rsa

GitHubのアカウントに公開鍵を登録

アカウント持ってなければ作る。ここも割愛。一応リンク↓
imgHow people build software · GitHub

リポジトリ作成

*リポジトリ持ってたら大丈夫

アカウント作ったらリポジトリ作成。
​ 自分のアカウントのページ行ってリポジトリのタブでNew押す。

  1. ​ リポジトリ名書いて
  2. ​ Public or Private 選択
  3. ​ Initialize this repository with a README に任意でチェック入れたら
  4. ​ Create repository クリック 20170130132949.png

公開鍵を登録する

  1. id_rsa.pubの中身をコピー

  2. 右上のメニューから Settings を選択

  3. gitのプロフィール画面の左側メニューSSH and GPG keys
    20170130132834.png

  4. New SSH keyをクリックして登録

ー「Title」はPC名とか自分がわかりやすいやつで

ー「Key」には、先ほどコピーした公開鍵の値をそのまま貼り付けます。

で、「Add SSH key」をクリック

これでSSH接続の設定おわり

SSH接続できるか確認

SSHのconfigファイルを設定したので、以下のように「github」と指定するだけで、記載したホスト名、ユーザー名、秘密鍵が自動的に使われます。

$ ssh github

以下のようなやつでたら、GitHub's SSH key fingerprintsにあるfingerprintsと一致するのを確認したらyes

The authenticity of host 'github.com (52.69.186.44)' can't be established.
RSA key fingerprint is SHA256:nThbg6kXUpJWGl7E1IGOCspRomTxdCARLviKw6E5SY8.
Are you sure you want to continue connecting (yes/no/[fingerprint])?

これがでればOK

Hi username! You've successfully authenticated, but GitHub does not # provide shell access.

いよいよGit使おう

作業ディレクトリ作成

$ mkdir git
$ cd git

おっと、ここで初心者の私が即席で調べて理解したgitの作業イメージを共有して進めたほうが親切そうだな

作業イメージ

ローカルリポジトリ(自分のパソコン内のリポ)とリモートリポジトリ(ネット上のリポ)ってのがあって

ステージング : どれを保存するか選ぶ
コミット:ローカルに保存
プッシュ:サーバに保存
マージ:Masterに更新

無題.png

ちなみに
プル : サーバからデータをローカルにロードする

(何か違えば教えてください)

リポジトリをローカルにCloneする

リポジトリをさっき作った作業ディレクトリ(ローカル)にクローンする。

GitHubのリポジトリのページから Clone or download をクリックして、今回は Use SSH を選択。

git@github.com:【ユーザー名】/【リポジトリ名】.git」という文字列をコピー
20170130132923.png

コピーしたやつを書きコマンド git clone のあとに張り付けてCloneする

$ git clone git@github.com:【ユーザー名】/【リポジトリ名】.git 
Cloning into '【リポジトリ名】'... remote: Counting objects: 3, done. remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 0 Receiving objects: 100% (3/3), done.

これで自分のディレクトリにファイルが入ってる

お次はリポジトリに移動してそのまま編集してコミットまでしたい気持ちはあるが、通常はMasterブランチにコミットすることはなく、ローカルで作業用のブランチを作って、そこで弄ったものをローカルで保存(コミット)してサーバにあげる(プッシュする)らしいのでそれをやる。

ブランチ作る

$ cd 【リポジトリ】
$ git checkout -b ブランチ名       #開発用のブランチを作成
Switched to a new branch 'ブランチ名'

*リポジトリのディレクトリの中には管理したいファイルを置いとく。以下で確認。

$ ls -l

ファイルをステージング

コミットしたいやつをステージング

$ git add 対象ファイル 

ちなみに取り消したいときは

$ git reset HEAD 対象ファイル

ローカルにコミット

ステージングされたやつをローカルに保存

コミットメッセージはおまかせ

$ git commit -m "コミットメッセージ"
[develop 77a190e] test commit
 1 file changed, 46 insertions(+), 5 deletions(-)

GitHubにプッシュ

下記コマンドでGitHubにプッシュします。

$ git push -u origin develop

#パスワードうったりして、なんか表示される

 * [new branch]      develop -> develop
Branch 'develop' set up to track remote branch 'develop' from 'origin'.

これがでたらおわり。

あとはGitHubを見に行ったら更新されてるのを確認。
お疲れ様です。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Git初心者がインストールからコミットできるまで【Windows編】

ネットで調べながらGitでコミットできるまで挑戦したら2~3時間程、苦戦したので同じステップを踏まないためにメモします

Windows10編

事前準備

  1. インストールについては割愛。一応リンク

2.インストールできたら、Git Bash起動。

最初にやること

まずはインストールできてるか確認

$ git --version
git version 2.25.1.windows.1
ユーザ名とメアドの設定
$ git config --global user.name "ユーザ名"
$ git config --global user.email メアド

設定できたか以下のコマンドで確認

$ git config --list 
...
...
user.name= ユーザ名 
user.email= メアド

SSHキー取得

リモートリポジトリとやり取りするためにSSHのカギが必要らしい。

SSHキー作成

※GitHubに登録しているEmailアドレスを使うのが一般的らしい

$ ssh-keygen -t rsa -b 4096 -C "メアド"

SSH Keysの保存先を聞かれているので、特に気にしなければそのままEnterを入力。

Enter file in which to save the key (/Users/you/.ssh/id_rsa): [Press enter]

ここで生成されるファイル名は上記のコマンドなら

id_rsaid_rsa.pubのはず。それ以外ならおかしい。自分は暗号のようなファイル名になったので何回かやり直した。

*よくわからんファイル出ても削除すれば問題なし。

パスフレーズ入力

Enter passphrase (empty for no passphrase): [Type a passphrase] # Enter same passphrase again: [Type passphrase again]

*ちなみに、色々な記事で、生成されたファイルにパーミッション設定するよう言われる(chmod 600のコマンド)がWindowsの場合いらない

Windowsでchmodは実行できないと書きましたが、元々Windowsでは他のユーザアカウントのデータは(管理者権限が無い限り)見えないようアクセス制御されていますので、「秘密鍵のパーミッション変更」は実行しないままで大丈夫です。

SSHのconfigファイル設定

GitHubへSSH接続する際に、どの秘密鍵を指定するのかを管理するのが目的。以下の内容を.ssh/config(拡張子なし)に記述。なければ作る。

Host github
  HostName github.com
  User git
  IdentityFile ~/.ssh/id_rsa

GitHubのアカウントに公開鍵を登録

アカウント持ってなければ作る。ここも割愛。一応リンク↓
How people build software · GitHub

リポジトリ作成

*リポジトリ持ってたら大丈夫

アカウント作ったらリポジトリ作成。
​ 自分のアカウントのページ行ってリポジトリのタブでNew押す。

  1. ​ リポジトリ名書いて
  2. ​ Public or Private 選択
  3. ​ Initialize this repository with a README に任意でチェック入れたら
  4. ​ Create repository クリック 20170130132949.png

公開鍵を登録する

  1. id_rsa.pubの中身をコピー

  2. 右上のメニューから Settings を選択

  3. gitのプロフィール画面の左側メニューSSH and GPG keys
    20170130132834.png

  4. New SSH keyをクリックして登録

ー「Title」はPC名とか自分がわかりやすいやつで

ー「Key」には、先ほどコピーした公開鍵の値をそのまま貼り付けます。

で、「Add SSH key」をクリック

これでSSH接続の設定おわり

SSH接続できるか確認

SSHのconfigファイルを設定したので、以下のように「github」と指定するだけで、記載したホスト名、ユーザー名、秘密鍵が自動的に使われます。

$ ssh github

以下のようなやつでたら、GitHub's SSH key fingerprintsにあるfingerprintsと一致するのを確認したらyes

The authenticity of host 'github.com (52.69.186.44)' can't be established.
RSA key fingerprint is SHA256:nThbg6kXUpJWGl7E1IGOCspRomTxdCARLviKw6E5SY8.
Are you sure you want to continue connecting (yes/no/[fingerprint])?

これがでればOK

Hi username! You've successfully authenticated, but GitHub does not # provide shell access.

さあ!いよいよGitを使おう

作業ディレクトリ作成

$ mkdir git
$ cd git

おっと、ここで初心者の私が即席で調べて理解したgitの作業イメージを共有して進めたほうが親切そうだな

作業イメージ

ローカルリポジトリ(自分のパソコン内のリポ)とリモートリポジトリ(ネット上のリポ)ってのがあって

ステージング : どれを保存するか選ぶ
コミット:ローカルに保存
プッシュ:サーバに保存
マージ:Masterに更新

無題.png

ちなみに
プル : サーバからデータをローカルにロードする

(何か違えば教えてください)

リポジトリをローカルにCloneする

リポジトリをさっき作った作業ディレクトリ(ローカル)にクローンする。

GitHubのリポジトリのページから Clone or download をクリックして、今回は Use SSH を選択。

git@github.com:【ユーザー名】/【リポジトリ名】.git」という文字列をコピー
20170130132923.png

コピーしたやつを書きコマンド git clone のあとに張り付けてCloneする

$ git clone git@github.com:【ユーザー名】/【リポジトリ名】.git 
Cloning into '【リポジトリ名】'... remote: Counting objects: 3, done. remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 0 Receiving objects: 100% (3/3), done.

これで自分のディレクトリにファイルが入ってる

お次はリポジトリに移動してそのまま編集してコミットまでしたい気持ちはあるが、通常はMasterブランチにコミットすることはなく、ローカルで作業用のブランチを作って、そこで弄ったものをローカルで保存(コミット)してサーバにあげる(プッシュする)らしいのでそれをやる。

ブランチ作る

$ cd 【リポジトリ】         #リポジトリのディレクトリへ移動
$ git checkout -b ブランチ名       #開発用のブランチを作成
Switched to a new branch 'ブランチ名'

*リポジトリのディレクトリの中には管理したいファイルを置いとく。以下で確認。

$ ls -l

ファイルをステージング

コミットしたいやつをステージング

$ git add 対象ファイル 

*ちなみに取り消したいときは

$ git reset HEAD 対象ファイル

ローカルにコミット

ステージングされたやつをローカルに保存

コミットメッセージはおまかせ

$ git commit -m "コミットメッセージ"
[develop 77a190e] test commit
 1 file changed, 46 insertions(+), 5 deletions(-)

GitHubにプッシュ

下記コマンドでGitHubにプッシュします。

$ git push -u origin ブランチ名

#パスワードうったりして、なんか表示される

 * [new branch]      ブランチ名 -> ブランチ名
Branch 'ブランチ名' set up to track remote branch 'ブランチ名' from 'origin'.

これがでたらおわり。

あとはGitHubを見に行ったら更新されてるのを確認。
お疲れ様です。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

GitHubにて初回git addができない現象

はじめに

ローカルリポジトリからリモートリポジトリへ初回pushしようとした際に起きたエラーについて備忘録として書きとめようと思います。

現象

ローカルリポジトリにて、
git init後にgit addを実行すると以下のエラー文が表示されました。

$ git add *
fatal: Unable to create '/vagrant/xxxxxx/.git/index.lock': File exists.

index.lockファイルが存在しているからエラーが出ているようです。
git statusで一応addできているか確認しましたが、addできておりません。

原因

やはりindex.lockファイルがあるからみたいでした。

git/index.lockとは
同じgitのリポジトリ内で同時に複数の処理を行わないための排他制御を行うもの。
つまり,index.lockが存在するということは,裏で他のgit操作が行われている。

今回git addを実行中に画面がフリーズしたので強制再起動した経緯があり、その後から急にaddができなくなりました。
それが複数処理と見なされたという事みたいです。

対処法

index.lockファイルを削除する。
削除しても問題無いようでしたので削除することにしました!!

$ rm .git/index.lock

無事git add成功しましたー:angel:

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

git: ステージングエリア、リポジトリ用の一般的なコマンド

  1. git init -- フォルダをgitの作業フォルダへ初期化
  2. git add {filename} -- ステージングエリアへ追加
  3. git commit -- リポジトリへ移動
  4. git log -- 履歴確認
git init
git add {filename}
git commit
git log
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

git: 一般的なコマンド

設定ファイル:

.git
.gitignore

コマンド:
1. git config --global user.name "USER NAME" : ユーザー名の設定
2. git config --global user.email "EMAIL ADDRESS" : ユーザーの電子メールアドレス
3. git config -l : 設定確認
4. git init : フォルダをgitの作業フォルダへ初期化
5. git status : 今の編集状況を確認
6. git diff : ワーキングディレクトリ内の編集の差分確認
7. git diff --cached : ステージングエリア内の編集の差分確認
8. git checkout -- {filename} : 編集のロールバック
9. git add {filename} : ステージングエリアへ追加
10. git commit -m "MESSAGE" : リポジトリへ移動
11. git log -- stat : 履歴確認
12. git branch : ブランチリスト表示
13. git branch {BRANCHNAME} : 新規ブランチを作成
14. git checkout {BRANCHANKE} : 希望のブランチへ移動
15. git merge {ReferredBranch} : 別のブランチからマージする
16. git branch -d {BRANCHNAME} : ブランチを削除
17. git remote add {repo name} {repo path} : リモートリポジトリの登録
18. git remote rm {repo name} : リモートリポジトリの削除
19. git push {repo name} {branchname} : ブランチの内容をリモートリポジトリにアップロード
20. git clone {repo path} {working directory} : リポジトリの内容をワーキングディレクトリへコピー
21. git pull {repo name} {branchname} : リポジトリの内容をブランチへダウンロード

git config --global user.name "Jon Star"
git config --global user.email "xxxxx.aaa.com"
git config -l
git init
git diff
git diff --cached
git status
git checkout -- {filename}
git add {filename}
git commit -m "MESSAGE"
git log --stat
git branch
git branch {BRANCHNAME}
git checkout {BRANCHNAME}
git merge {ReferredBranch}
git branch -d {BranchName}
git remote add {repo name} {repo path}
git remote rm {repo name}
git push {repo name} {branchname}
git clone {repo path} {working directory}
git pull {repo name} {branchname}
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

[自分用]gitの理解

概要

まずは用語から。

リポジトリ
ソースの保存場所。
ローカルリポジトリとリモートリポジトリがあり、基本的にはローカルに保存したものをリモートに送信する。
ステージングエリア(インデックス)
リポジトリにソースを登録する前に、登録したいものは何かを挙げる場所。
ブランチ
リポジトリの登録履歴管理ツール。履歴が枝分かれするツリー状になる
絶対動作するブランチと作業ブランチを分けたりして使う。

※基本的には今居るブランチを確認して、
作業ディレクトリ
⇒ステージングエリア
⇒ローカルリポジトリ
⇒(ブランチマージ)
⇒リモートリポジトリ
と登録していく。

コマンド一覧

git config -設定

gitに自分の情報を登録する。(windowsならその前にgitのインストールから)
必ず自分の名前とE-mailを教える。

 git config --global user.name "<自分の名前>"      #名前の登録
 git config --global user.name "<自分のE-mail>"    #E-mailの登録
 git config -l     #設定一覧

git init -宣言

このディレクトリをリポジトリにするよとgitに宣言(直下に .git ファイルが生成される)
このとき master というブランチが作られる。
ディレクトリを移動してから実行しましょう。

 git init    #リポジトリ作成

git add -indexに追加

ステージングエリアにファイルを登録する。
git add <ファイル名> でファイルを登録。

 git add -A     #リポジトリ全体の変更があったファイルを登録
 git add .      #カレントディレクトリ以下の変更があったファイルを登録
 git add *.py   #.py拡張子のすべてのファイルを登録

git commit -コミット

ステージングエリアの内容をリポジトリに登録する。

 git commit -m"message"     #messageはコミットメッセージで必須
 git commit -am"message"    #addと同時にcommitまで行う
 git commit --amend         #前のコミットを上書きする(コメント間違えたときなど)

git remote -リポジトリ宣言

リモートリポジトリを登録する。

git remote add <リポジトリ名> <リポジトリの場所> で登録。
 git remote add origin https://github.com/username/lepositoryname.git      #リモートリポジトリを登録
 git remote -v    #詳細な情報を表示

git push -プッシュ

リモートリポジトリにソースを登録する。
git push <リポジトリ名> <ブランチ名> で登録。

 git push origin master    #ソースをプッシュ
 git push -f origin master    #ソースを強制プッシュ

git clone -コピー

リモートリポジトリの内容を別のリポジトリにコピーする(checkoutが行われる)
git clone <リポジトリの場所> (<ディレクトリ名>) でコピー。
ディレクトリを移動してから実行しましょう。

 git clone https://github.com/username/lepositoryname.git    #リポジトリ名が作成されるディレクトリ名になる
 git clone https://github.com/username/lepositoryname.git clonelepository    #clonelepositoryがディレクトリ名になる

git pull -プル

リモートリポジトリとローカルリポジトリの差分をローカルに持ってくる。

git pull <リポジトリ名> <ブランチ名> で実行。
git pull origin master     #差分を持ってくる
#強制pull
git fetch origin master    #細心の情報を取ってくる
git reset --hard origin/master    #取ってきた情報に強制的に合わせる

git branch -ブランチ操作

git branch <ブランチ名> で実行。
今居るブランチから<ブランチ名>の枝が作られる。

 git branch work     #workブランチ作成
 git branch          #ブランチ一覧表示 * があるのが今居るブランチ
 git branch -d work  #workブランチ削除

git checkout -ブランチ移動

git checkout <ブランチ名> で実行。
<ブランチ名> のブランチに移動。
作業ディレクトリに変更があると移動できない。

 git checkout work     #workブランチに移動

git merge -ブランチマージ

git merge <ブランチ名> で実行。
今居るブランチに <ブランチ名> のブランチの変更を追加。

 git merge work     #workブランチの変更を追加。

※ブランチ間で変更を同時に行うと、コンフリクト(衝突)が発生する⇒エディタを起動して修正する。

git log -履歴

コミット履歴を表示。

 git log              #コミット履歴表示
 git log --oneline    #コメントだけ表示
 git log -p           #詳しい情報
 git log --stat       #どのファイルが変わったか

git status -状態確認

今のgitの状態を表示。

 git status    #変更されたファイルやaddされたファイルが表示される

git diff -変更確認

詳細な変更内容を見る。

 git diff             #作業ディレクトリとindexの差分表示
 git diff --cached    #indexとHEAD(最後のコミット)の差分表示

git reset -復元

コミット状態を復元する。

 git reset --hard HEAD          #一つ前のコミット状態を復元
 git reset --hard HEAD^         #二つ前のコミット状態を復元(つまり直前のコミットの取り消し)
 git reset --hard <コミットID>    #そのコミットを復元する
 git reset --hard ORIG_HEAD     #リセットする一つ前に戻る(リセットをやめる)
 git reset --soft HEAD^         #ファイルは残したままコミットを取り消す
 git reset HEAD .               #直前のaddを取り消す

git revert -履歴付き復元

コミット状態を復元する(履歴は残す)

 git revert <コミットID>    #そのコミットを復元する

git rm -削除

ステージングエリアにファイルの削除を登録する。
git rm <ファイル名> で実行。

 git rm *.py    #pyファイルを削除する

git mv -移動

ステージングエリアにファイルの移動を登録する。
git rm <ファイルパス> <移動先のパス> で実行。

 git mv *.py move/             #moveディレクトリ以下にpyファイルを移動
 git mv hello.txt HELLO.txt    #リネームはmvでやるのが無難
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

gitコマンドまとめ

git status

  • 前回ステージにあげたとき(add)とワークツリーとの差分
  • 前回リポジトリにあげたとき(commit)とステージとの差分

git diff

  • git diff {file_name(optional)} => addする前の差分
  • git diff --staged => addした後の差分

git log

  • git log => 変更履歴を表示
  • --online: 1行で表示
  • -p {file_name}: 特定のファイルの変奥履歴
  • -n {コミット数}: コミット数だけ差分を表示
  • --decorate: どのブランチがどのコミットを指しているか

git rm

  • git rm --cached {file_name}: ファイルを残してキャッシュだけ削除
  • git rm -r {dir_name}: ディレクトリ削除
  • git rm {file_name}: コミットからもワークツリーからも削除

git mv

  • git mv {old_file} {new_file}

= mv {old_file} {new_file} + git rm {oldfile} + git add {new_file}

git remote

  • git remote add origin {some_url.git}: "origin"というショートカットでurlを登録
  • git remote rm origin: "origin"ショートカットを削除
  • git remote rename {old_remote_name} {new_remote_name}: リモートの名前変更
  • git remote -v: リモートリポジトリの確認
  • git remote show {remote_name}: 細かいリモートの情報

aliasの作成

  • git config --global alias.ci commit: "commit" = "ci"

git checkout

  • git checkout -- {file_name}: add前のファイルの変更を取り消す(ステージと同じにする)
  • git checkout {branch_name}: ブランチの移動
  • git checkout -b {branch_name}: 作成移動

git reset

  • git reset HEAD {file_name}: add後のファイルの変更を取り消す(ローカルは変化なし)
  • git reset HEAD^: 現在のブランチの最新のコミットを取り消してステージングも消す

git commit

  • git commit --amend: 直前のcommitをやり直す(現在のステージの状態で上書き)
  • git commit -v: エディタでコミットコメントを打つ(詳細つき)

git fetch

  • git fetch {remote_name}: リモートリポジトリからローカルリポジトリに取ってくる

= ワークツリーには取ってこない(remotes/remote_name/branch_name)

> `git fetch origin`
> `git branch -a`
> `git checkout remotes/origin/master`
> `ls` // ローカルリポジトリの内容確認

git branch

  • git branch -a: ブランチ一覧
  • git branch -m {new_branch_name}: ブランチ名の変更(move)
  • git branch -d {branch_name}: ブランチの削除(masterにmergeされてない場合削除しない)
  • git branch -D {branch_name}: ブランチの削除(強制)
  • git branch {branch_name}: ブランチの作成(移動はしない)
  • git branch {branch_name} {remote}/{branch_name}: リモートのブランチから作る

git merge

  • git merge {remote_name}/{branch_name}: ワークツリーにローカルリポジトリを統合
  • git merge {branch_name}: ローカルブランチを統合

git pull

  • git pull {remote_name} {branch_name}: fetch + merge
  • git pull --rebase {remote_name} {branch_name}: rebase型のpull(内容だけ取得したい)

= git config --global pull.rebase trueでデフォルトをrebase型に

= git config branch.master.rebase trueでmasterは常にrebase型に
※ ただしワークツリーのブランチにマージされてしまうので注意

git rebase

  • git rebase {branch_name}: 親コミットを別のブランチに変更(GitHubにあげるとき注意)

= コミットの履歴をきれいに整理してくれる

> `git checkout feature`
> `git rebase master` // 親コミットをmasterに
> `git checkout master`
> `git merge feature` // masterをfeatureと同じに
  • git rebase -i {commit_id}: 複数のコミットをやり直す
> `git rebase -i HEAD~3` // 直前3つのコミットをやり直す HEAD^2はマージの2個め
> --- pick gh21f6d ヘッダーを修正
> +++ edit gh21f6d ヘッダーを修正 // squash: 直前のコミットと1つにする
> `git commit --amend`
> `git rebase --continue` // 次のコミットへ進む

git tag

  • git tag: タグの一覧を表示
  • git tag -l {search_word}: 絞り込み検索
  • git tag -a {tag_name} -m {message}: メッセージ付きタグの作成
  • git tag {tag_name}: 軽量版タグの作成
  • git tag {tag_name} {commit_name}: 後からタグ付け

= タグをリモートにpushする場合には

> `git push {remote_name} {tag_name}` // タグひとつを送信
> `git push {remote_name} --tags` // 一斉送信

git show

  • git show {tag_name}: タグ付けられたコミットを表示

git stash

  • git stash: コミットしたくないけどブランチを変えたいときに一次避難
  • git stash list: スタッシュ一覧
  • git stash apply: 最新のスタッシュの復元
  • git stash apply --index: ステージの情報も復元
  • git stash apply {stash_name}: 特定のスタッシュの復元
> `git stash apply stash@{1}` // stash@{1}を指定
  • git stash drop: 最新のスタッシュの削除
  • git stash drop {stash_name}: 特定のスタッシュの削除
  • git stash drop clear: 全スタッシュの削除

git switch

  • git switch {branch_name}: ブランチの移動
  • git switch -c {branch_name}: ブランチを作りつつ移動

git restore

  • git restore {file_name}: add前のファイルの変更を取り消し

= git checkout -- {file_name}
- git restore --staged {file_name}: add後のファイルの変更を取り消し

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む