- 投稿日:2020-07-13T23:31:30+09:00
git がどうしても重くなったときに実行するコマンド
- 投稿日:2020-07-13T23:25:06+09:00
開発作業の沿ったGitコマンドの使い方
概要
個々のGitコマンドについての説明記事は多数存在するが、開発作業で利用するコマンドが整理されている記事はあまり見つからなかった。
開発作業は多種多様なためどのケースにも当てはまるものではないが、Gitのリモートリポジトリから資材を取得してからプルリクエストを出すまでの手順を参考として作成。本文
1.開発着手時
リモートリポジトリをコピーし、作業用ブランチを作成する。
①開発対象のリポジトリの内容をローカルコピー(ローカルリポジトリの作成)
get clone xxxx(クローンURL)②開発のマージ先ブランチに切り替え(デフォルトブランチがマージ先ブランチになっていない場合)
git checkout feature/develop③マージ先ブランチの最新資材を取得
git pull④作業用ブランチの作成
git checkout -b feature/xxxxx2.開発中
修正した資材をコミットし、リモートリポジトリにpushする。
①修正資材の確認
git status②修正資材をコミット対象に追加
git add (git statusで確認した資材のパス)※以下コマンドを使用すると修正資材すべてがコミット対象に追加される。便利だが不要な資材までコミット対象に入ってしまないよう注意。
git add .誤った資材をaddしてしまった場合、以下のコマンドで取消し。
git reset HEAD④修正ソースのコミット
git commit -m '(コミットコメント)'⑤ローカルリポジトリのコミット内容をリモートリポジトリへpush
git push origin feature/xxxxx3.開発完了、プルリクエスト提出
マージ先ブランチの修正をマージし、競合を解消させてからプルリクエストを提出する。
①マージ先へ切り替え
git checkout feature/develop②マージ先ブランチの最新資材をローカルリポジトリに取得
git pull③マージ元(開発中ブランチ)へ切り替え
git checkout feature/xxxxx④ローカルリポジトリでマージ先ブランチの最新資材をマージ
git merge feature/develop⑤競合が発生した場合は競合を解消(※解消手順は別途作成)
⑥マージ結果をリモートリポジトリにpush
git push origin feature/xxxxx⑦プルリクエストを作成
4.その他
・ローカルリポジトリの修正を破棄して、リモートリポジトリの内容に戻したい。
git fetch origin git reset --hard origin/HEAD
- 投稿日:2020-07-13T22:23:15+09:00
Gitでのファイル名変更はgit mvを使う
起こったこと
gitを使って開発をしている際に、text_HOME.svgというファイル名をtext_home.svgに変更したところ
nothing to commit, working tree clean
と言われました。
どうやらファイル名の変更がGitに差分として認識されていないよう。実験
同じような状況を再現してみます。
ディレクトリ
rename_test
に実験用のファイルtext.txtが存在しており、working treeには何もない状態です。
それでは、test.txtをTest.txtにリネームしてみます。
普通にmvコマンドを使ってtext.txtをリネームしてもgitは差分を認識してくれません。
git mvコマンド
今度はファイル名の変更が差分として認識されました?
参考
- 投稿日:2020-07-13T22:23:15+09:00
Gitでのファイル名変更
起こったこと
gitを使って開発をしている際に、text_HOME.svgというファイル名をtext_home.svgに変更したところ
nothing to commit, working tree clean
と言われました。
どうやらファイル名の変更がGitに差分として認識されていないよう。実験
同じような状況を再現してみます。
ディレクトリ
rename_test
に実験用のファイルtext.txtが存在しており、working treeには何もない状態です。
それでは、test.txtをTest.txtにリネームしてみます。
普通にmvコマンドを使ってtext.txtをリネームしてもgitは差分を認識してくれません。
git mvコマンド
今度はファイル名の変更が差分として認識されました?
参考
- 投稿日:2020-07-13T21:30:36+09:00
いまさらだけどSubversionからGitへ移行する(その2)
先日、こちらの記事を書きました。
今回はその続きでSVNリポジトリー構成のバリエーションの話とGitLabなどを中心としたGitリポジトリー管理ツールとのマッピングの話になります。SVNリポジトリー上に実プロジェクトが複数含まれていた場合になります。SVN上での作業というよりも変換直後の複数実プロジェクトが混在する大きなGitリポジトリーをどうGit上で操作し分割していくかになります。
過去のSVNと最近のGitプロジェクト構成
前回の移行はこんなパターンに主に対応。
myproj ├─trunk ├─branches │ ├─hoge-fix │ └─foo-func └─tags ├─RELEASE_1_0 └─RELEASE_2_0これは、GitLab/GitHubみたいな Group や Subgroup, Organization や Team みたいな概念がある場合、移行先は例えば、
https://gitlab.example.com/mygroup/myproj.git
orgit@gitlab.example.com:mygroup/myproj.git
などに単純に移行することになるかと思います。
今回は、次のような形式で、GitLabの場合Group相当の部分にSVNのリポジトリーが存在し、その下にサブディレクトリーとして複数のプロジェクトが存在する場合、
myproj ├─trunk │ ├─proj-a │ └─proj-b ├─branches │ ├─proj-a-hoge-fix │ └─proj-b-foo-func └─tags ├─proj-a-RELEASE_1_0 ├─proj-a-RELEASE_2_0 └─proj-b-RELEASE_1_0これを、
https://gitlab.example.com/mygroup/proj-a.git
orgit@gitlab.example.com:mygroup/proj-a.git
https://gitlab.example.com/mygroup/proj-b.git
orgit@gitlab.example.com:mygroup/proj-b.git
という形で
Group/Project
という形で分けたい場合を想定しています。作業方法
前回の記事の作業でSVNリポジトリーが次のGitリポジトリーに既に移行できているものとします。
https://gitlab.example.com/mygroup/myproj.git
該当プロジェクトディレクトリーだけを抽出する
myproj
をproj-a
ディレクトリーにcloneし、$ git clone git@gitlab.example.com:mygroup/myproj.git proj-a $ cd proj-a/
proj-a
を抽出しそれ以外を削除$ git filter-branch --prune-empty --subdirectory-filter proj-a masterこれで、元の
myproj/proj-a/*
の内容がproj-a/*
に抽出され他は消えます。ブランチの抽出
$ for BRANCH_NAME in $(git branch -r | grep -e 'origin/myproj-a' | sed -e 's:origin/::');do git checkout "$BRANCH_NAME"; done$ git checkout master
上記は、
proj-a
のブランチ名付与がproj-a-hoge-fix
などproj-a
で始まっているのが条件。そうでない場合は、何が
proj-a
用のSVNブランチであったかを予め確認しリストアップしたブランチ名をテキストに書いておいて、for文で回すなどするのが良いかと思われます。あるいは元のSVNリポジトリーのbranches
を確認しつつ手で、$ git checkout hoge-fix $ git checkout foo-func . .するのも数が少なければ良いかと。
幸い、私のSVN環境ではブランチ名前を統一していたので、上記のようにfor文で回せました。
異なるプロジェクトのタグの削除
proj-a
以外のproj-b
,proj-c
, ... のタグが残っているので削除する必要があります。もっと良い方法があるかもしれませんが、
$ for TAG_NAME in $(git tag -l | grep -v 'proj-b.*'); do git tag -d "$TAG_NAME"; done $ for TAG_NAME in $(git tag -l | grep -v 'proj-c.*'); do git tag -d "$TAG_NAME"; done . .こんな感じで消去。
こちらもブランチ同様に
proj-a-RELEASE_1.0
などproj-a
で始まる名前をルールとしてタグ付けしていたので、上記で回せました。ブランチ同様に予めタグ一覧をテキストなどにしてfor文で回したり、GitLabなどをリモートリポジトリーにするなら、タグは残したままpushし、WebGUI上からポチポチと関係ないものを削除するのもアリかもしれません。リモートへの登録
まあ、ここらへんは普通にリモート先を変更してpushします。
$ git remote rename origin old-origin $ git remote add origin git@gitlab.example.com:mygroup/proj-a.git $ git push -u origin --all $ git push -u origin --tags繰り返し
以上を
proj-b
,proj-c
,proj-d
, ...で繰り返し、
https://gitlab.example.com/myproj/proj-a
https://gitlab.example.com/myproj/proj-b
https://gitlab.example.com/myproj/proj-c
https://gitlab.example.com/myproj/proj-d
などが移行できたら完了。
まとめ
面倒くさいですね。
SVN上でブランチ名、タグ名をある程度ルール化していたから良かったものの、そうでなかったらもっと手間がかかるはず。
- 投稿日:2020-07-13T21:04:42+09:00
[Git/GitHub]branch名を変更したい場合の対処法
- 投稿日:2020-07-13T19:08:18+09:00
Gitで作業開始前にブランチを切り忘れた時の対処法
またやってしまった…
現在オリジナルアプリを開発中なのですが、最近gitにも慣れてきたせいか作業開始前によくブランチを切り忘れるので反省の念も込めて対処法を備忘録として書きます。
解決方法
まだコミットしていない場合
git checkout -b hoge(新しいブランチを作り切り替える)これだけでOKです!
このままコミットを行えばhogeブランチにコミットされます。
コミットされるまでブランチは分かれていない仕様のようです。ですので、変更しているファイルは変わらないです。hogeブランチからmasterブランチに切り替えると作業開始前の綺麗な状態に戻ります。
コミットしてしまった場合
以下の2つのコマンドを実行
#ブランチを作り移動 git checkout -b hoge #masterをorigin/masterの状態へ戻す。 git branch -f master origin/master-f(force)はあまり使いたくない場合(私はこっちを使います)
#masterブランチにいる状態で git branch -m hoge git branch master origin/master #masterブランチがなくなったことで-fオプション無しでブランチが作れる
git branch -m
,--move
を使うと現在いるブランチをリネームすることができます。
ローカルのmasterがなくなるので、二つ目のコマンドでmasterブランチを再作成します。結論
リモートにpushする前に気付けば全然なんとかなる。(なお、反省してない模様)
最後までご覧いただきありがとうございます。
もし間違い等ありましたらコメントからご指摘いただけますと幸いです。
- 投稿日:2020-07-13T18:11:08+09:00
よく使うgitコマンドまとめ
sshで開発する事があり、コマンド操作でgitを利用する事があったのでメモ。
よく使うコマンド
リポジトリをダウンロード(clone)
$ git clone https://〜〜〜 # リポジトリのURLリモートとローカルの同期(pull)
git fetch
も含まれている。$ git pull履歴の確認
commitIDとコメントが確認できる。
$ git log差分の確認(diff)
差分ファイルを表示する。
$ git statusファイル内の差分表示する。(ファイルパスは
git status
で出たもの)$ git diff [コミットID | ファイルパス]
q
キーで確認終了。差分の取り消し
変更前の状態に戻す。
$ git checkout [ファイルパス]
全てのファイル
の差分を取り消す。$ git checkout . # ピリオドを使用する変更をindexに保持
差分ファイルを
indexに保持
する。$ git add [ファイルパス]
-A
オプションは差分が出ている全てのファイル
を指定する。$ git add -A変更の記録(commit)
indexに保持した差分をbranchに記録する。
$ git commit -m "hogehogeメッセージ"branchの確認
自分の使用しているbranchの確認と、branch一覧を表示する。
$ git branchbranchの作成
現在いるbranchにて以下のコマンドで新しいbranchを派生させる。
個人で使うには自由、共同開発現場ではgit-flowチートシート
の内容が一般的。$ git checkout -b ブランチ名branchの切り替え(checkout)
$ git checkout 切り替え先のブランチ名branchの削除
$ git branch -D ブランチ名commitの削除
git log
で表示させた対象のcommitIDまでのcommitを削除する。$ git reset --hard commitID変更をリモートに渡す(push)
originはとりあえず固定でリモートを指すものと解釈しておく。
$ git push origin ブランチ名強制的にremoteに渡す。(バージョンがエラーになって解決の糸口が無いときの手段)
$ git push -f origin ブランチ名他branchから差分を取り込む(merge)
開発中のbranchにいる状態でmasterを指定すればmasterの差分が取り込まれる。
競合(conflict)が起こるとエラーが出る。rebase
という手段もあり。$ git merge 取り込むブランチ名 # 今checkoutしているブランチに取り込まれるタグを付ける
$ git tag タグ名タグにコメント(注釈)を付ける
$ git tag -a tag -m "hogehogeテスト"タグのPUSH
$ git push origin タグ名全タグのPUSH
$ git push origin --tagsタグを消す
$ git tag -d ダグ名リモートのタグを消す
ローカルのタグを消した後に以下のコマンド。タグ名の前に
:
が必要。$ git push origin :タグ名タグ一覧
$ git tag初期設定
履歴に残る名前を設定
$ git config --global user.name "自分の名前" $ git config --global user.email "xxxxx@xxxxxxx.co.jp"初期化
gitが設定されていないディレクトリで以下を実行するとgitが適用される。
$ git init初期化後に
branchを作成(master)
、変更をindexに保持
、変更をbranchに記録(commit)
することによって、最初のrepositoryが完成
する。
初期化した後にファイルの変更を行うと差分
が生まれる。その他
Serverにrepositoryを用意
Server内でgit用のディレクトリ(xxxx.gitと名前を付ける)に移動し、以下のコマンドを実行。
$ git init --bare --sharedローカルとリモートの紐付け
クライアント側で行う。
domain
はIPでもURLでも。
xxxx.git
はServer内のgitディレクトリのフルパス。$ git remote add origin https://[user名@]domain:xxxx.git子リポジトリの読み込み
$ git submodule hogehoge子リポジトリの更新
$ git submodule update【参考】originて何
http://dqn.sakusakutto.jp/2011/10/git_push_origin_master.html
- 投稿日:2020-07-13T18:11:08+09:00
よく使うgitコマンド
sshで開発する事があり、コマンド操作でgitを利用する事があったので引き継ぎ用。
初期設定
履歴に残る名前を設定
$ git config --global user.name "自分の名前" $ git config --global user.email "xxxxx@xxxxxxx.co.jp"初期化
gitが設定されていないディレクトリで以下を実行するとgitが適用される。
$ git init初期化後に
branchを作成(master)
、変更をindexに保持
、変更をbranchに記録(commit)
することによって、最初のrepositoryが完成
する。
初期化した後にファイルの変更を行うと差分
が生まれる。普段使い
branchの同期(リモートとローカル)
git fetch
も含まれている。$ git pull履歴の確認
commitIDとコメントが確認できる。
$ git log差分の確認
差分ファイルを表示する。
$ git statusソースコードの差分を表示する。
$ git diff [コミットID | ファイルパス]
q
キーで確認終了。差分の取り消し
変更前の状態に戻る。
$ git checkout [ファイルパス]
全てのファイル
の差分を取り消す。$ git checkout . #ピリオドを使用する変更をindexに保持
差分ファイルを
indexに保持
する。$ git add [ファイルパス]
-A
オプションは差分が出ている全てのファイル
を指定する。$ git add -A変更の記録(commit)
indexに保持した差分を記録する。
$ git commit -m "hogehogeメッセージ"branchの確認
自分の使用しているbranchの確認と、branch一覧を表示する。
$ git branchbranchの作成
現在いるbranchにて以下のコマンドで新しいbranchを派生させる。
個人で使うには自由、共同開発現場ではgit-flowチートシート
の内容が一般的。$ git checkout -b ブランチ名branchの切り替え
$ git checkout 切り替え先のブランチ名branchの削除
$ git branch -D ブランチ名commitの削除
対象のcommitIDまでのcommitを削除する。
$ git reset --hard commitID変更をremoteに渡す(PUSH)
originはとりあえず固定でリモートを指すものと解釈しておく。
$ git push origin ブランチ名強制的にremoteに渡す。(バージョンがエラーになって解決の糸口が無いときの手段)
$ git push -f origin ブランチ名他branchから差分取り込み
開発中のブランチにいる状態でmasterを指定すればmasterの差分が取り込まれる。
競合が起こるとエラーが出る。rebase
というのもあり。$ git merge ブランチ名その他
Serverにrepositoryを用意
Server内でgit用のディレクトリ(xxxx.gitと名前を付ける)に移動し、以下のコマンドを実行。
$ git init --bare --sharedローカルとリモートの紐付け
クライアント側で行う。
domain
はIPでもURLでも。
xxxx.git
はServer内のgitディレクトリのフルパス。$ git remote add origin https://[user名@]domain:xxxx.gitoriginて何やねん
http://dqn.sakusakutto.jp/2011/10/git_push_origin_master.html
- 投稿日:2020-07-13T15:12:27+09:00
Git
?Gitの基本
Gitとは、
プログラムのソースコードなどの変更履歴を記録・追跡するための分散型バージョン管理システムである。Gitの準備
1回目だけ実行
$ git init共有するファイルを選択
$ git add ファイル名選択したファイルを記録
$ git commit -m "コメント"リモートを登録
$ git remote add origin(リモート名) URLリモートのmasterブランチにファイルをアップロード
$ git push origin masterリモートのmasterブランチのファイルをダウンロードする
$ git pull origin master変更したファイルを確認
$ git status現在の変更内容の確認
$ git diff過去のコミットのログの確認
$ git log過去の変更内容の確認
$ git log -p
- 投稿日:2020-07-13T13:04:08+09:00
githubアカウント複数に1台のmacからpushできるように設定した手順
前提
自分のところでは仕事用のアカウントがすでに設定されているmacで
そこに勉強用を足すという状況でした。
なおこの設定は秘密鍵をgithubアカウント毎に設定しております。事故が起きないよう~/.sshディレクトリのバックアップや
接続先の確認コマンドをこまめに実施することをオススメいたします。確認コマンド.sh#コマンドは各リポジトリにて実施 # gitとの接続コマンド元から設定されているもの $ ssh -T github # gitとの接続コマンドプライベート用 $ ssh -T github-private # 現在のリポジトリのリモート接続先を確認 $ git remote -v既存のリポジトリ設定
まずは既存のリポジトリ設定を整理していきます。
既存のリポジトリはホストがgithub.comで設定されている状況でした。now.sh$ ssh -T git@github.com Hi username! Youve successfully authenticated, but GitHub does not provide shell access.今回追加したいのもgithubの、もう1つのアカウントです。
つまり1つのPCからgithubの2つのアカウントにpushできるようにしたいのです。そこでまずはmacの~/.ssh/configにhostの設定をします。
以下追記します。追記場所はどこでも大丈夫だと思います。Host github-work User git Port 22 HostName github.com IdentityFile ~/.ssh/id_work_rsa TCPKeepAlive yes IdentitiesOnly yes UseKeychain yes AddKeysToAgent yesこれはホスト名と秘密鍵を指定する作業となり
github-workというホスト名でssh接続をしようとした際は
id_work_rsaという秘密鍵を使ってくださいねとなります。configファイルを保存したら以下のコマンドで
githubと通信ができるか確認してみましょう。connect.sh$ ssh -T github-work Hi username! Youve successfully authenticated, but GitHub does not provide shell access.↑このようにこれまでと同じusernameでメッセージが返ってきたらこれまでと同じアカウントに指定の秘密鍵で通信ができているということになります。
エラーが出た場合はgithubの設定を確認して
macの秘密鍵とgithub上に設定されている公開鍵が
きちんと設定できているかを確認してみてください。
https://github.com/settings/ssh>>参考:GitHubでssh接続する手順~公開鍵・秘密鍵の生成から~
リモートリポジトリを設定(既存ローカルリポジトリ毎に)
macの中で管理しているリポジトリ(githubに紐づいているもの)に移動して
以下のコマンドでリモートリポジトリを設定します。setorigin.sh#mac内の既存リポジトリに移動 $ cd projectA #現状のリモートリポジトリを確認。 $ git remote -v origin git@github.com:username/ripositoryname.git #host名はconfigのHost=github-private #ユーザーID、リポジトリはgithubのものを設定 #git remote set-url origin [Host名]:[ユーザ名]/[リポジトリ名].git $ git remote set-url origin github-work:username/ripositoryname.gitこのリモートリポジトリはローカルに複数のリポジトリがあれば
ローカルリポジトリごとに設定する必要があります。
この作業で明示的にホスト名:秘密鍵のペアを作成して
このホスト名だったらこの秘密鍵を使って
リモートにアクセスするという設定ができました。この設定をする前まではドメインに基づいて秘密鍵を選び
ssh接続していたということになります。新しいgithubアカウントへの接続設定
1.公開鍵、秘密鍵を別名生成
上書きを防ぐため鍵の入っていないディレクトリに移動して以下のコマンドを実行。
対話形式で進めますが以下のように最初に聞かれるところで
名前をid_private_rsaとします。$ ssh-keygen -t rsa Generating public/private rsa key pair. Enter file in which to save the key (/Users/(username)/.ssh/id_rsa):id_private_rsa名前を聞かれた後にssh接続のパスワード設定をするか聞かれますが
今回は勉強用ということもあり何も入力せずにreturnキーを押します。
その後パスワードの確認も未入力でreturn。2.githubにプライベート用アカウントを作成し
公開鍵をアップロードします。
>>参考:GitHubでssh接続する手順~公開鍵・秘密鍵の生成から~3.ローカルPCの~/.ssh/configファイルを設定
プライベート用のHostを設定します。
以下を追記します。
追記場所はおそらくどこでも良いと思います。Host github-private User git Port 22 HostName github.com IdentityFile ~/.ssh/id_private_rsa TCPKeepAlive yes IdentitiesOnly yes UseKeychain yes AddKeysToAgent yes4.リポジトリごとのリモートを設定します。
ローカルで新しく作った勉強用リポジトリに移動して以下を実行します。
これによりローカルのリポジトリとgithub上のリモートリポジトリが結びつきます。addremote.sh#まずはリモートリポジトリを追加します。githubでアカウント作成した時に表示されるやつです。 #これやらずにいきなりsetーurlするとエラーが出ます。fatal: No such remote 'origin $ git remote add origin https://github.com/githubアカウント/リポジトリ名.git #host名はconfigのHost=github-private #ユーザーID、リポジトリはgithubのものを設定 $ git remote set-url origin [Host名]:[ユーザID]/[リポジトリ].gitリモートが設定できたかを確認します。
verify-remote.sh$ git remote -v5.githubとの接続を確認します。
以下を実行します。
connect.sh#ここで新しいアカウント名が表示されていたらこのPCから新しいgithubアカウントに接続できているということになります。 $ ssh -T github-private6.テストpush
勉強用リポジトリからテストを行います。
pushして新しいgithubアカウントのリポジトリに反映されれば完了です。test.sh$ touch test.txt $ git add . $ git commit -m "Test commit"参考URL
大変お世話になりました。感謝です。
>>参考:GitHubを複数のアカウントで利用するためのメモ
>>参考:GitHubでssh接続する手順~公開鍵・秘密鍵の生成から~
- 投稿日:2020-07-13T13:04:08+09:00
複数のgithubアカウントに1台のmacからpushできるように設定した手順
前提
自分のところでは仕事用のアカウントがすでに設定されているmacで
そこに勉強用を足すという状況でした。
なおこの設定は秘密鍵をgithubアカウント毎に設定しております。事故が起きないよう~/.sshディレクトリのバックアップや
接続先の確認コマンドをこまめに実施することをオススメいたします。確認コマンド.sh#コマンドは各リポジトリにて実施 # gitとの接続コマンド元から設定されているもの $ ssh -T github # gitとの接続コマンドプライベート用 $ ssh -T github-private # 現在のリポジトリのリモート接続先を確認 $ git remote -v既存のリポジトリ設定
まずは既存のリポジトリ設定を整理していきます。
既存のリポジトリはホストがgithub.comで設定されている状況でした。now.sh$ ssh -T git@github.com Hi username! Youve successfully authenticated, but GitHub does not provide shell access.今回追加したいのもgithubの、もう1つのアカウントです。
つまり1つのPCからgithubの2つのアカウントにpushできるようにしたいのです。そこでまずはmacの~/.ssh/configにhostの設定をします。
以下追記します。追記場所はどこでも大丈夫だと思います。Host github-work User git Port 22 HostName github.com IdentityFile ~/.ssh/id_work_rsa TCPKeepAlive yes IdentitiesOnly yes UseKeychain yes AddKeysToAgent yesこれはホスト名と秘密鍵を指定する作業となり
github-workというホスト名でssh接続をしようとした際は
id_work_rsaという秘密鍵を使ってくださいねとなります。configファイルを保存したら以下のコマンドで
githubと通信ができるか確認してみましょう。connect.sh$ ssh -T github-work Hi username! Youve successfully authenticated, but GitHub does not provide shell access.↑このようにこれまでと同じusernameでメッセージが返ってきたらこれまでと同じアカウントに指定の秘密鍵で通信ができているということになります。
エラーが出た場合はgithubの設定を確認して
macの秘密鍵とgithub上に設定されている公開鍵が
きちんと設定できているかを確認してみてください。
https://github.com/settings/ssh>>参考:GitHubでssh接続する手順~公開鍵・秘密鍵の生成から~
リモートリポジトリを設定(既存ローカルリポジトリ毎に)
macの中で管理しているリポジトリ(githubに紐づいているもの)に移動して
以下のコマンドでリモートリポジトリを設定します。setorigin.sh#mac内の既存リポジトリに移動 $ cd projectA #現状のリモートリポジトリを確認。 $ git remote -v origin git@github.com:username/ripositoryname.git #host名はconfigのHost=github-private #ユーザーID、リポジトリはgithubのものを設定 #git remote set-url origin [Host名]:[ユーザ名]/[リポジトリ名].git $ git remote set-url origin github-work:username/ripositoryname.gitこのリモートリポジトリはローカルに複数のリポジトリがあれば
ローカルリポジトリごとに設定する必要があります。
この作業で明示的にホスト名:秘密鍵のペアを作成して
このホスト名だったらこの秘密鍵を使って
リモートにアクセスするという設定ができました。この設定をする前まではドメインに基づいて秘密鍵を選び
ssh接続していたということになります。新しいgithubアカウントへの接続設定
1.公開鍵、秘密鍵を別名生成
上書きを防ぐため鍵の入っていないディレクトリに移動して以下のコマンドを実行。
対話形式で進めますが以下のように最初に聞かれるところで
名前をid_private_rsaとします。$ ssh-keygen -t rsa Generating public/private rsa key pair. Enter file in which to save the key (/Users/(username)/.ssh/id_rsa):id_private_rsa名前を聞かれた後にssh接続のパスワード設定をするか聞かれますが
今回は勉強用ということもあり何も入力せずにreturnキーを押します。
その後パスワードの確認も未入力でreturn。2.githubにプライベート用アカウントを作成し
公開鍵をアップロードします。
>>参考:GitHubでssh接続する手順~公開鍵・秘密鍵の生成から~3.ローカルPCの~/.ssh/configファイルを設定
プライベート用のHostを設定します。
以下を追記します。
追記場所はおそらくどこでも良いと思います。Host github-private User git Port 22 HostName github.com IdentityFile ~/.ssh/id_private_rsa TCPKeepAlive yes IdentitiesOnly yes UseKeychain yes AddKeysToAgent yes4.リポジトリごとのリモートを設定します。
ローカルで新しく作った勉強用リポジトリに移動して以下を実行します。
これによりローカルのリポジトリとgithub上のリモートリポジトリが結びつきます。addremote.sh#まずはリモートリポジトリを追加します。githubでアカウント作成した時に表示されるやつです。 #これやらずにいきなりsetーurlするとエラーが出ます。fatal: No such remote 'origin $ git remote add origin https://github.com/githubアカウント/リポジトリ名.git #host名はconfigのHost=github-private #ユーザーID、リポジトリはgithubのものを設定 $ git remote set-url origin [Host名]:[ユーザID]/[リポジトリ].gitリモートが設定できたかを確認します。
verify-remote.sh$ git remote -v5.githubとの接続を確認します。
以下を実行します。
connect.sh#ここで新しいアカウント名が表示されていたらこのPCから新しいgithubアカウントに接続できているということになります。 $ ssh -T github-private6.テストpush
勉強用リポジトリからテストを行います。
pushして新しいgithubアカウントのリポジトリに反映されれば完了です。test.sh$ touch test.txt $ git add . $ git commit -m "Test commit"参考URL
大変お世話になりました。感謝です。
>>参考:GitHubを複数のアカウントで利用するためのメモ
>>参考:GitHubでssh接続する手順~公開鍵・秘密鍵の生成から~
- 投稿日:2020-07-13T10:31:19+09:00
[Rails]schema.rbのコンフリクト解消
はじめに
チーム開発をしている際に、プルリクエストを作成したところconflictが発生した。
他のファイルはメンバーに相談しながら解消できたが、
Railsで自動更新されるschema.rbファイルは勝手に修正して良いのだろうか?と詰まった。解消
以下の記事を参考に修正を試みた。
コンフリクトしたschema.rbをきれいにマージする手順ターミナル$ git checkout masterを実行しようとしたところ、
error: you need to resolve your current index first
と出てしまい、ブランチの切り替えが出来なかった。ターミナルgit merge --abortこれで一旦前の状態に戻すことで、ブランチの切り替えが可能になりました。以降は、上記の記事を参考にコンフリクトを解消し、マージすることが出来ました。
- 投稿日:2020-07-13T09:59:08+09:00
【初心者向け】よく使うGitのコマンド一覧 〜GitとGitHubの基本的な使い方〜
はじめに
ここではGit初心者向けに、よく使うGitのコマンド一覧とGitとGitHubの基本的な使い方を紹介します。
また最初にGitを使う際の基本的なターミナルのコマンドも紹介しています。環境
mac OS Catalina バージョン10.15.5
git version 2.26.2ターミナルの基本的なコマンド
$ pwd
現在のフォルダ場所(ディレクトリ階層)の表示
$ ls
ファイルやディレクトリの表示
ls -l
ファイルやディレクトリを詳細まで表示
$ ls -a
隠しを含んだファイルやディレクトリの表示
ls -la
隠しを含んだファイルやディレクトリを詳細まで表示
$ cd ~~
〜のフォルダに移動
$ cd ..
下の階層に移動
$ history
コマンド履歴の表示
$ clear
画面をリセットGitのコマンド
Gitのバージョン確認
$ git --version作業ディレクトリにGitを使う宣言をする
$ git initGitHubのリポジトリをローカルにクローンする
$ git clone git@github.com:【ユーザー名】/【リポジトリ名】.gitブランチを確認する
$ git branchブランチを新たに作成
$ git branch [ブランチ名]ブランチを削除
$git branch -d [ブランチ名]現在のステータス確認
$ git statusステージングエリアにあげる
$ git add [ファイル名] $ git add .git add [ファイル名]:[ファイル名]をステージングエリアにあげる
git add . :全てをステージングエリアにあげる。コミットする
$ git commit "コミット名"コミットメッセージを1行以内に納める
$ git commit -m "コミット名"一つ前のコミットと統合する
$ git git commit --amend -m "コミット名"Gitのログを確認する
$ git logGitのlogを簡潔にまとめて表示する
$ git log --onelineGitHubに初めてプッシュする
$ git push origin [ブランチ名]GitHubにプッシュする(2回目以降)
$ git pushローカルリポジトリをリモートリポジトリに同期する
$ git fetch originリモートブランチと同期したデータ、追跡ブランチをローカルリポジトリに取り込む
$ git merge origin / [ブランチ名]mergeとfetchをまとめて行う
$ git pull origin [ブランチ名]前の状態に戻る
$ git checkout --[ファイル名]編集した箇所を表示
$ git diffステージングエリアにあげた場合、コミットで変更されるファイルが分かる
$ git diff --cachedコミットした後の編集されたファイルが分かる
$ git diff -r [ID名]git addを取り消す
$ git reset HEAD または $ git reset HEAD [ファイル名]直前に戻る
$ git reset --hard HEAD1つ前に戻る
$ git reset --hard HEAD^指定されたlogに戻る
$ git reset --hard [ID]マージを始めた頃のブランチに戻る
$ git reset --hard ORIG_HEADリモートリポジトリ削除
$ git remote rm origin参考にしたサイト
- 投稿日:2020-07-13T09:10:54+09:00
フォークしたリポジトリを最新化する方法
フォークしたリポジトリを最新化したい
GitHubでOSSに参加する時、
- GitHub上の対象のOSSのリポジトリをフォークしリモートリポジトリを作成
- GitHub上のリモートリポジトリをローカルにクローン
- ブランチを切って修正して commit
- リモートリポジトリへ push してプルリク
のような流れを踏むと思います。
ただ、自分が修正を進めている間にも、フォーク元のオリジナルのリポジトリでは開発が進んでいます。
プルリクがコンフリクトしないように4.の前にオリジナルのリポジトリの開発差分をマージする必要があります。その方法を調べたのでメモします。
方法
# ローカルのリポジトリに移動 $ cd ローカルのリポジトリのパス # GitHubのフォーク元のリポジトリをリモートブランチに追加する $ git remote add upstream https://github.com/フォーク元オーナー名/フォーク元リポジトリ名.git # リモートブランチの一覧を確認するとのフォーク元のリポジトリが追加されている git remote -v > origin ... > origin ... > upstream https://github.com/フォーク元オーナー名/フォーク元リポジトリ名.git (fetch) > upstream https://github.com/フォーク元オーナー名/フォーク元リポジトリ名.git (push) # フォーク元の master ブランチの変更差分をフェッチます。 # ※upstream/master に保管されます $ git fetch upstream # masterブランチをチェックアウトしフォーク元の差分をマージします。 $ git checkout master $ git merge upstream/master # 最後に自分の修正ブランチに master ブランチを取り込みます。コンフリクトが出たら解決します。 $ git checkout 自分の修正ブランチ $ git merge master上記でフォークしたリポジトリを最新化し修正差分も自分のブランチに取り込めたのでコンフリクトなくプルリクを送ることができます。
参考
フォークにリモートを設定する
https://docs.github.com/ja/github/collaborating-with-issues-and-pull-requests/configuring-a-remote-for-a-forkフォークを同期する
https://docs.github.com/ja/github/collaborating-with-issues-and-pull-requests/syncing-a-fork
- 投稿日:2020-07-13T00:25:33+09:00
git clone
git cloneする時でのエラー。
本番環境用のグループにpg gemを追加しましたが、この開発環境にはインストールしないようにbundle installを実行します。bundle install --without production