バージョン管理

ソースコードの変更履歴を保存することで
変更差分を確認したり、過去のある時点に復元することができます。

GitHub

Githubではバージョン管理システムであるGitのリポジトリを作成することができます。
ソースコードを公開したり、共有したりすることができます。

Githubの使い方

1. Create a repository

Githubのアカウントを作成して、GUIでGithub上にリポジトリを作成します。
非公開にすることもできます。

2. Create a branch

スパコン上にローカルリポジトリを作成します。(git init)
README.mdを作成したことをインデックスに記録します。(git add)
インデックスの状態をローカルリポジトリに記録します。(git commit)
ブランチを作成して、作成したブランチ名に切り替えます。(git branch)
Github上のリポジトリにローカルリポジトリを反映させます。(git push)

Note

SSH

公開鍵をGithubに登録するとSSHでGithubと通信できます。
[username@gc016 ~]$mkdir work
[username@gc016 ~]$cd work
[username@gc016 work]$git init
[username@gc016 work]$echo -n > README.md
[username@gc016 work]$git add README.md
[username@gc016 work]$git commit -m "first commit"
[username@gc016 work]$git branch -M main
[username@gc016 work]$git remote add origin git@github.com:{アカウント名}/{レポジトリ名}.git
[username@gc016 work]$git push -u origin main

3. Clone a repository

Github上のリポジトリをスパコン上にコピーします。
コピーしたレポジトリに移動します。
[username@gc016 ~]$mkdir work2
[username@gc016 ~]$cd work2
[username@gc016 work2]$git clone git@github.com:{アカウント名}/{レポジトリ名}.git
[username@gc016 work2]$cd {レポジトリ名}

4. Pull Request & Merge

コピーしたリポジトリ上でファイルを更新して
devブランチとしてGithubにpushします。

Github上でGUIでCompare & pull requestをクリックすることでpull requestを作成します。
問題なければMerge pull requestをクリックしてdevブランチの変更をmainブランチに統合します。

Note

アクセス権限

開発者に与えるpushやmergeの権限を管理することで
開発体制を整えることができます。
[username@gc016 {レポジトリ名}]$echo TEST > README.md
[username@gc016 {レポジトリ名}]$git add README.md
[username@gc016 {レポジトリ名}]$git commit -m "second commit"
[username@gc016 {レポジトリ名}]$git branch dev
[username@gc016 {レポジトリ名}]$git checkout dev
[username@gc016 {レポジトリ名}]$git push -u origin dev

4. Create a tag

Github上でGUIでReleases -> Choose a tagの順でクリックして新しいタグ名を入力します。
Create new tag: {タグ名} on publish -> Publish releaseの順にクリックしてreleaseを作成します。

Gitの使い方

1. Delete a commit

ローカルでgitで開発しているとき
コミットのみを削除したい場合の例です。

まずgit log コマンドでコミット状況を見ます。
commit e2cd2037d0803d3dce6ad67dfb542253c040feb1 (HEAD -> master)
Author: author <author>
Date:   Wed Jun 21 11:30:07 2023 +0900

    second

commit 75880fdda6dd61555f1c0951885eac8cd87ed7a1
Author: author <author>
Date:   Wed Jun 21 11:21:54 2023 +0900

    first
firstに戻りたい場合は以下のコマンドを実行します。(firstのcommit idを使います。)
git reset --soft 75880fdda6dd61555f1c0951885eac8cd87ed7a1
git logで再度確認します。
commit 75880fdda6dd61555f1c0951885eac8cd87ed7a1 (HEAD -> master)
Author: author <author>
Date:   Wed Jun 21 11:21:54 2023 +0900

     first

2. Merge branches and Create a tag

リモートレポジトリに移動してmasterブランチにdevブランチをマージした後
バージョン名を最新のコミットにタグつけします。
cd {リモートレポジトリ}
git checkout master
git merge dev
git tag {バージョン名} {commit id}

3. Copy a remote repository

ベアクローンしたレポジトリを複製先にミラープッシュします。
configを元に戻してworking treeを作成します。
mkdir -p {複製先のリモートレポジトリ}/.git
cd {複製先のリモートレポジトリ}/.git
git init --bare
mkdir {一時ディレクトリ}
cd {一時ディレクトリ}
git clone --bare {複製元のリモートレポジトリ}
cd *
git push --mirror  {複製先のリモートレポジトリ}/.git
cd {複製先のリモートレポジトリ}/.git
git config --bool core.bare false
git config --bool core.filemode true
git config --bool core.logallrefupdates true
git checkout dev
git checkout master

4. Update a local branch

リモートレポジトリの変更をローカルレポジトリに反映させます。
cd {ローカルレポジトリ}
git pull {リモートレポジトリ} master
リモートレポジトリ上でコミットを取り消した場合は
git pullできないかもしれません。
その場合はローカルレポジトリを削除して
再度git cloneします。