- 投稿日:2020-03-01T18:21:28+09:00
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しない。
- 投稿日:2020-03-01T17:05:40+09:00
Git初心者がインストールしてコミットできるまでの流れ【Windows編】
当方知識ゼロの初心者で、ネットで調べながらGitでコミットできるまで挑戦したら2~3時間ぐらいかかってやや苦戦?したので同じステップを踏まないために、自分メモと誰かのためになればと
できるだけ細かいこと省いて、可読性を上げたいので今回は実践したWindows10の環境を対象。
事前準備
インストールについては割愛。一応リンク↓
(
Git for Windows(git-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_rsaとid_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_rsaGitHubのアカウントに公開鍵を登録
アカウント持ってなければ作る。ここも割愛。一応リンク↓
How people build software · GitHub
リポジトリ作成
*リポジトリ持ってたら大丈夫
アカウント作ったらリポジトリ作成。
自分のアカウントのページ行ってリポジトリのタブでNew押す。
- リポジトリ名書いて
- Public or Private 選択
- Initialize this repository with a README に任意でチェック入れたら
- Create repository クリック
![]()
公開鍵を登録する
id_rsa.pubの中身をコピー右上のメニューから Settings を選択
gitのプロフィール画面の左側メニューSSH and GPG keysの
New SSH keyをクリックして登録
ー「Title」はPC名とか自分がわかりやすいやつで
ー「Key」には、先ほどコピーした公開鍵の値をそのまま貼り付けます。
で、「Add SSH key」をクリック
これでSSH接続の設定おわり
SSH接続できるか確認
SSHの
configファイルを設定したので、以下のように「github」と指定するだけで、記載したホスト名、ユーザー名、秘密鍵が自動的に使われます。$ ssh github以下のようなやつでたら、GitHub's SSH key fingerprintsにあるfingerprintsと一致するのを確認したら
yesThe 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に更新ちなみに
プル : サーバからデータをローカルにロードする(何か違えば教えてください)
リポジトリをローカルにCloneする
リポジトリをさっき作った作業ディレクトリ(ローカル)にクローンする。
GitHubのリポジトリのページから Clone or download をクリックして、今回は Use SSH を選択。
「
git@github.com:【ユーザー名】/【リポジトリ名】.git」という文字列をコピー
コピーしたやつを書きコマンド
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を見に行ったら更新されてるのを確認。
お疲れ様です。
- 投稿日:2020-03-01T17:05:40+09:00
Git初心者がインストールしてコミットできるまで【Windows編】
当方知識ゼロの初心者で、ネットで調べながらGitでコミットできるまで挑戦したら2~3時間ぐらいかかってやや苦戦?したので同じステップを踏まないために、自分メモと誰かのためになればと
できるだけ細かいこと省いて、可読性を上げたいので今回は実践したWindows10の環境を対象。
事前準備
インストールについては割愛。一応リンク↓
(Git for Windows(git-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_rsaとid_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_rsaGitHubのアカウントに公開鍵を登録
アカウント持ってなければ作る。ここも割愛。一応リンク↓
How people build software · GitHub
リポジトリ作成
*リポジトリ持ってたら大丈夫
アカウント作ったらリポジトリ作成。
自分のアカウントのページ行ってリポジトリのタブでNew押す。
- リポジトリ名書いて
- Public or Private 選択
- Initialize this repository with a README に任意でチェック入れたら
- Create repository クリック
![]()
公開鍵を登録する
id_rsa.pubの中身をコピー右上のメニューから Settings を選択
gitのプロフィール画面の左側メニューSSH and GPG keysの
New SSH keyをクリックして登録
ー「Title」はPC名とか自分がわかりやすいやつで
ー「Key」には、先ほどコピーした公開鍵の値をそのまま貼り付けます。
で、「Add SSH key」をクリック
これでSSH接続の設定おわり
SSH接続できるか確認
SSHの
configファイルを設定したので、以下のように「github」と指定するだけで、記載したホスト名、ユーザー名、秘密鍵が自動的に使われます。$ ssh github以下のようなやつでたら、GitHub's SSH key fingerprintsにあるfingerprintsと一致するのを確認したら
yesThe 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に更新ちなみに
プル : サーバからデータをローカルにロードする(何か違えば教えてください)
リポジトリをローカルにCloneする
リポジトリをさっき作った作業ディレクトリ(ローカル)にクローンする。
GitHubのリポジトリのページから Clone or download をクリックして、今回は Use SSH を選択。
「
git@github.com:【ユーザー名】/【リポジトリ名】.git」という文字列をコピー
コピーしたやつを書きコマンド
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を見に行ったら更新されてるのを確認。
お疲れ様です。
- 投稿日:2020-03-01T17:05:40+09:00
Git初心者がインストールからコミットできるまで【Windows編】
ネットで調べながらGitでコミットできるまで挑戦したら2~3時間程、苦戦したので同じステップを踏まないためにメモします
Windows10編
事前準備
- インストールについては割愛。一応リンク
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_rsaとid_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_rsaGitHubのアカウントに公開鍵を登録
アカウント持ってなければ作る。ここも割愛。一応リンク↓
How people build software · GitHubリポジトリ作成
*リポジトリ持ってたら大丈夫
アカウント作ったらリポジトリ作成。
自分のアカウントのページ行ってリポジトリのタブでNew押す。
- リポジトリ名書いて
- Public or Private 選択
- Initialize this repository with a README に任意でチェック入れたら
- Create repository クリック
![]()
公開鍵を登録する
id_rsa.pubの中身をコピー右上のメニューから Settings を選択
gitのプロフィール画面の左側メニューSSH and GPG keysの
New SSH keyをクリックして登録
ー「Title」はPC名とか自分がわかりやすいやつで
ー「Key」には、先ほどコピーした公開鍵の値をそのまま貼り付けます。
で、「Add SSH key」をクリック
これでSSH接続の設定おわり
SSH接続できるか確認
SSHの
configファイルを設定したので、以下のように「github」と指定するだけで、記載したホスト名、ユーザー名、秘密鍵が自動的に使われます。$ ssh github以下のようなやつでたら、GitHub's SSH key fingerprintsにあるfingerprintsと一致するのを確認したら
yesThe 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に更新ちなみに
プル : サーバからデータをローカルにロードする(何か違えば教えてください)
リポジトリをローカルにCloneする
リポジトリをさっき作った作業ディレクトリ(ローカル)にクローンする。
GitHubのリポジトリのページから Clone or download をクリックして、今回は Use SSH を選択。
「
git@github.com:【ユーザー名】/【リポジトリ名】.git」という文字列をコピー
コピーしたやつを書きコマンド
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を見に行ったら更新されてるのを確認。
お疲れ様です。
- 投稿日:2020-03-01T16:53:07+09:00
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成功しましたー
- 投稿日:2020-03-01T15:06:51+09:00
git: ステージングエリア、リポジトリ用の一般的なコマンド
- git init -- フォルダをgitの作業フォルダへ初期化
- git add {filename} -- ステージングエリアへ追加
- git commit -- リポジトリへ移動
- git log -- 履歴確認
git init git add {filename} git commit git log
- 投稿日:2020-03-01T15:06:51+09:00
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}
- 投稿日:2020-03-01T00:21:52+09:00
[自分用]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でやるのが無難
- 投稿日:2020-03-01T00:10:43+09:00
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 + mergegit 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後のファイルの変更を取り消し



