0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Windows10 + heroku + github + Ruby on Rails 事始め④ github編(2020/02版)

Last updated at Posted at 2020-02-04

概要

  • 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 に公開鍵を登録します。

image.png

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します。

image.png

clone

clone用URLを確認します。

image.png

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ディレクトリには、全ファイルがあります。

image.png

差分抽出先ディレクトリには、更新のあったファイルのみが出力されています。

image.png

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?