概要
- github で複数のアカウントを使い分ける
- github のcommit間の変更ファイル一覧を取得する
- github 上にあげられたソースから更新分のファイルのみ抽出する
サブアカウント作成
サブアカウント用ディレクトリ作成
サブアカウント用ディレクトリ(以下、サブワークディレクトリ)を適当な場所に作成します。
今回はワークディレクトリの下に作成しました。
<ワークディレクトリ>
$ mkdir <サブワークディレクトリ名>
<ワークディレクトリ>
$ cd <サブワークディレクトリ名>
検収用ディレクトリのgit初期化
git init
でgit用初期化を行います。
<サブワークディレクトリ>
$ git init
Initialized empty Git repository in <サブワークディレクトリ>/.git/
gitconfig設定
このローカルリポジトリ専用のサブアカウントを設定します。
git config
の引数に --local
を使うのがポイントです。
<サブワークディレクトリ> (master)
$ git config --local user.name <githubアカウント名>
<サブワークディレクトリ> (master)
$ git config --local user.email <githubアカウントメールアドレス>
<サブワークディレクトリ> (master)
$ cat .git/config
[core]
repositoryformatversion = 0
filemode = false
bare = false
logallrefupdates = true
symlinks = false
ignorecase = true
[user]
name = <githubアカウント名>
email = <githubアカウントメールアドレス>
参考: https://qiita.com/0084ken/items/f4a8b0fbff135a987fea
サブアカウントのSSH接続設定を行う
サブアカウントをgithubとSSH接続できるように設定を行っていきます。
詳しくは、事始め①#SSH接続設定 を参照して下さい。
ここでは、コマンドのみ列挙します。
<サブワークディレクトリ> (master)
$ cd ../
<サブワークディレクトリ>
$ mkdir .ssh
<サブワークディレクトリ>
$ cd .ssh
<サブワークディレクトリ>/.ssh
$ ssh-keygen -t rsa -b 4096 -C <githubアカウントメールアドレス>
Generating public/private rsa key pair.
Enter file in which to save the key (/<ユーザディレクトリ>/.ssh/id_rsa): ./id_rsa
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in ./id_rsa.
Your public key has been saved in ./id_rsa.pub.
The key fingerprint is:
<フィンガープリント> <githubアカウントメールアドレス>
<サブワークディレクトリ>/.ssh
$ ls -la
total 8
drwxr-xr-x 1 Lunaria 197121 0 2月 4 11:54 ./
drwxr-xr-x 1 Lunaria 197121 0 2月 4 11:53 ../
-rw-r--r-- 1 Lunaria 197121 3326 2月 4 11:54 id_rsa
-rw-r--r-- 1 Lunaria 197121 744 2月 4 11:54 id_rsa.pub
github に公開鍵を登録します。
SSH接続を確認します。
ここで、ログインしたアカウントが、サブアカウントである事を確認します。
<サブワークディレクトリ>
$ ssh -T git@github.com -i ./.ssh/id_rsa
Enter passphrase for key './.ssh/id_rsa':
Hi miz21358! You've successfully authenticated, but GitHub does not provide shell access.
サブ用SSH接続情報をユーザーディレクトリ>.sshディレクトリ>configに登録します。
$ cat ~/.ssh/config
Host github
HostName github.com
IdentityFile /<ワークディレクトリ>/.ssh/id_rsa
User git
Host github.acceptance
HostName github.com
IdentityFile /<サブワークディレクトリ>/.ssh/id_rsa
User git
host名でのSSH接続を確認します。
ホスト名を切り替える事で、SSH鍵も切り替えられます。
<サブワークディレクトリ>
$ ssh -T github.acceptance
Enter passphrase for key '/<サブワークディレクトリ>/.ssh/id_rsa':
Hi miz21358! You've successfully authenticated, but GitHub does not provide shell access.
<サブワークディレクトリ>
$ ssh -T github
Enter passphrase for key '/<ワークディレクトリ>/.ssh/id_rsa':
Hi miu200521358! You've successfully authenticated, but GitHub does not provide shell access.
サブアカウントでの作業
fork
ブラウザからメインアカウントで作業していたリポジトリをforkします。
clone
clone用URLを確認します。
cloneコマンドを実行します。
この時、コピーしたURLの冒頭の git@github.com
を、SSH設定したサブアカウント用ホスト名 github.acceptance
に置き換えている事に注意してください。
ホスト名・鍵のペアを指定する事で、サブアカウントでのcloneができます。
$ git clone github.acceptance:miz21358/ror-sample.git
Cloning into 'ror-sample'...
Enter passphrase for key '/d/Project/20200201_heroku_ror/acceptance/.ssh/id_rsa':
remote: Enumerating objects: 167, done.
remote: Counting objects: 100% (167/167), done.
remote: Compressing objects: 100% (119/119), done.
remote: Total 167 (delta 33), reused 159 (delta 25), pack-reused 0
Receiving objects: 100% (167/167), 30.73 KiB | 178.00 KiB/s, done.
Resolving deltas: 100% (33/33), done.
更新分のファイル抽出
更新履歴確認
master と branchのIDを比較して、更新されたファイルリストを取得します。
この作業は、既にbranchなりcommitなりが数度行われている事が前提条件となります。
$ git log
commit 99f6830da8e4c8461fe92d0ae645c897472775d0 (HEAD -> work-create-page, origin/work-create-page, heroku/master)
Author: githubアカウント名 <githubメールアドレス>
Date: Mon Feb 3 17:09:47 2020 +0900
ユーザー一覧画面追加
commit 125327f9c9039da433144bcae316bdd7e7b13b31 (heroku/work-create-page)
Author: githubアカウント名 <githubメールアドレス>
Date: Mon Feb 3 14:20:40 2020 +0900
home>topページ追加
commit 662484075697862b4f66836ae9dc8f9e03a25a98 (origin/master, master)
Author: githubアカウント名 <githubメールアドレス>
Date: Sat Feb 1 13:00:52 2020 +0900
config postgresql
commit 3ff8be79294e2f68b6234643da664a61dbdad55f
Author: githubアカウント名 <githubメールアドレス>
Date: Sat Feb 1 12:21:53 2020 +0900
first commit
:
差分ファイルリスト
以下コマンドで、コミット単位の差分ファイルリストが取得できます。
commitID
は上記の git log
で出てきたコミット履歴の commit
の値です。
git diff <commitID旧>^..<commitID新> --name-only
$ git diff 662484075697862b4f66836ae9dc8f9e03a25a98^..125327f9c9039da433144bcae316bdd7e7b13b31 --name-only
Gemfile
Gemfile.lock
app/assets/javascripts/blogs.coffee
app/assets/javascripts/home.coffee
app/assets/stylesheets/blogs.scss
app/assets/stylesheets/home.scss
app/assets/stylesheets/scaffolds.scss
app/controllers/blogs_controller.rb
app/controllers/home_controller.rb
app/helpers/blogs_helper.rb
app/helpers/home_helper.rb
app/models/blog.rb
app/views/blogs/_blog.json.jbuilder
app/views/blogs/_form.html.erb
app/views/blogs/edit.html.erb
app/views/blogs/index.html.erb
app/views/blogs/index.json.jbuilder
app/views/blogs/new.html.erb
app/views/blogs/show.html.erb
app/views/blogs/show.json.jbuilder
app/views/home/top.html.erb
config/database.yml
config/routes.rb
db/migrate/20200201042410_create_blogs.rb
db/schema.rb
test/controllers/blogs_controller_test.rb
test/controllers/home_controller_test.rb
test/fixtures/blogs.yml
test/models/blog_test.rb
test/system/blogs_test.rb
差分ファイルリストをコピーする
以下コマンドで、差分ファイルをフォルダ構造のまま、別ディレクトリにコピーすることができます。
差分抽出先ディレクトリは事前に作っておいてください。
cp -pv --parents `git diff --name-only <commitID旧>^..<commitID新>` <差分抽出先ディレクトリ>
<ワークディレクトリ>/ror-sample (work-create-page)
$ cp -pv --parents `git diff --name-only 662484075697862b4f66836ae9dc8f9e03a25a98^..125327f9c9039da433144bcae316bdd7e7b13b31` ../ror-sample-pick/
'Gemfile' -> '../ror-sample-pick/Gemfile'
'Gemfile.lock' -> '../ror-sample-pick/Gemfile.lock'
app -> ../ror-sample-pick/app
app/assets -> ../ror-sample-pick/app/assets
app/assets/javascripts -> ../ror-sample-pick/app/assets/javascripts
'app/assets/javascripts/blogs.coffee' -> '../ror-sample-pick/app/assets/javascripts/blogs.coffee'
'app/assets/javascripts/home.coffee' -> '../ror-sample-pick/app/assets/javascripts/home.coffee'
(略)
masterディレクトリには、全ファイルがあります。
差分抽出先ディレクトリには、更新のあったファイルのみが出力されています。