gitは非常に便利な履歴管理ソフトですが、コマンド操作がメインなので理解を深めるために都度文章や図に纏めて復習することをお勧めします。
フォークしたレポジトリに最新の本家レポジトリの内容をマージする方法について。
まず本家レポジトリmain-repoのリモートアドレスを追加します。リモート名はbase-repo(任意)としました。
git remote add base-repo git://github.com/main-repo/repo.git
リモートが追加されたかどうか確認します。
git remote -v
本家レポジトリのfetchフェッチ(ファイル郡のロード)とmergeマージ(ファイル群の上書き)をpullコマンドで実行します。(masterブランチ上で実行していますが、新規ブランチを作成し、そこでpullコマンドを実行、masterブランチにcheckoutチェックアウトしmergeマージした方がいいかもしれません。)
git pull base-repo master
フォークしたサーバに変更内容をpushプッシュ(アップロード)します。
git push origin
大まかなレポジトリの種類
① githab上の本家レポジトリ
[email protected]:main_repo/test.git
② github上で①からフォーク(folk)したレポジトリ(repositry) —>フォークリモート:通常originという名称
[email protected]:my_repo/test.git
③ ②を自分のPCへクローン(clone)したローカルレポジトリ
git clone [email protected]:my_repo/test.git
フォークレポジトリとローカルレポジトリ
②と③は各々変更してもpushやfetchまたはpushコマンドで双方の内容を容易に一致させることができます。
本家レポジトリとローカルレポジトリ
①と②または③との整合性を取るためには、
- ローカルレポジトリ内で①をリモートとして追加登録
- fetch,mergeコマンドでローカルレポジトリに本家レポジトリの内容を上書き
- フォークリモートへpushします。
<補足説明>
1.リモートの追加と確認は以下の手順で行います。
https://help.github.com/articles/configuring-a-remote-for-a-fork/
リモートの確認
$ git remote -v
origin https://github.com/YOUR_USERNAME/YOUR_FORK.git (fetch)
origin https://github.com/YOUR_USERNAME/YOUR_FORK.git (push)
オリジナルリモートの追加(リモート名:upstream)
$ git remote add upstream https://github.com/ORIGINAL_OWNER/ORIGINAL_REPOSITORY.git
リモートの再確認
$ git remote -v
origin https://github.com/YOUR_USERNAME/YOUR_FORK.git (fetch)
origin https://github.com/YOUR_USERNAME/YOUR_FORK.git (push)
upstream https://github.com/ORIGINAL_OWNER/ORIGINAL_REPOSITORY.git (fetch)
upstream https://github.com/ORIGINAL_OWNER/ORIGINAL_REPOSITORY.git (push)
Githubへのアクセスに2段階認証している場合には、ユーザパスワードの代わりにトークンを生成して、これを利用します。
トークンはGithubのユーザページのSettings—>Deveropper settings—>personal access tokensで生成して下さい。
リモートURLの変更(sshからhttpsへの変更、またはその逆)
Switching remote URLs from SSH to HTTPS
$ git remote set-url origin https://github.com/USERNAME/REPOSITORY.git
Switching remote URLs from HTTPS to SSH
$ git remote set-url origin [email protected]:USERNAME/REPOSITORY.git
Git Rebase
https://git-scm.com/docs/git-rebase
ex) topicにチェックアウトしている状態で最新masterの内容を反映
A---B---C topic
/
D---E---F---G master
$ git rebase master
or
$ git rebase master topic
would be
A'--B'--C' topic
/
D---E---F---G master
フォークレポジトリに最新のフォーク元レポジトリの内容を反映
フォークレポのmaster上で実施
Step 1: リモートにフォーク元レポ:base-repo(名称任意)を追加
git remote add base-repo https://github.com/original-repo/goes-here.git
Step 2: ブランチを含むフォーク元レポをフェッチ
git fetch base-repo
Step 3: rebaseコマンドによるフォークレポのmasterをフォーク元レポのmasterに書換え
git rebase base-repo/master
Step 4: オリジナルリモートorigin(フォークレポ)masterにプッシュ
git push origin master --force
GitLabパブリックサーバへの登録
GitHubをMicrosoftが管理するようになってから、アップロードしたコードの取り扱いなどについて色々と条件が変更になっているようで、GitLabへ移行するユーザが増えているようです。GitLabはGitHub同様、パプリックサーバが用意されていることに加え、ローカルで専用サーバを構築することもできるためプライベートなコードの管理についてはこちらの方が便利です。今後はGitLabへシフトした方がいいかもしれません。
SSHキーペアを利用してリモートサーバへアクセス
Algorithm |
Public key |
Private key |
ED25519 (preferred) |
id_ed25519.pub |
id_ed25519 |
ED25519_SK |
id_ed25519_sk.pub |
id_ed25519_sk |
ECDSA_SK |
id_ecdsa_sk.pub |
id_ecdsa_sk |
RSA (at least 2048-bit key size) |
id_rsa.pub |
id_rsa |
DSA (deprecated) |
id_dsa.pub |
id_dsa |
ECDSA |
id_ecdsa.pub |
id_ecdsa |
For example, for ED25519:
$ ssh-keygen -t ed25519 -C "<comment>"
For 2048-bit RSA:
$ ssh-keygen -t rsa -b 2048 -C "<comment>"
Ed25519: high-speed high-security signatures
https://ed25519.cr.yp.to/
作成したキーペアのパブリックキーの中身を、GitLabのアカウントメニューの “SSH Keys” から登録後アクセスできるか確認
$ ssh -T [email protected]
Welcome to GitLab, @ficusonline!
ユーザとパスワードの入力を省くため、リモートをhttpsではなくSSHで登録
$ git remote add origin [email protected]:<User_Name>/<Project_Name>.git
Error: “you are not allowed to push code to protected branches on this project”
プロジェクトメニューから "Settings" → "Repository" → "Protected branches"
の Expand
ボタンをクリックして設定事項を展開します。"Unprotect"
をクリックするか、 "Developers can push"
を選択して下さい。