当サイトの一部ページには、アフィリエイト・アドセンス・アソシエイト・プロモーション広告を掲載しています。

Amazonのアソシエイトとして、Security Akademeiaは適格販売により収入を得ています。

広告配信等の詳細については、プライバシーポリシーページに掲載しています。

消費者庁が、2023年10月1日から施行する景品表示法の規制対象(通称:ステマ規制)にならないよう、配慮して記事を作成しています。もし問題の表現がありましたら、問い合わせページよりご連絡ください。

参考:令和5年10月1日からステルスマーケティングは景品表示法違反となります。 | 消費者庁

既刊管理用リポジトリーから新刊管理用リポジトリーを作る【GitHubでRe:VIEWプロジェクト管理編】

はじめに

いつもブログをご覧いただきありがとうございます。

ミジンコに転生したIPUSIRONです😀

IPUSIRONのプロフィールを見る

誰得情報だと思いますが、自分のためのメモ(同人誌作りのたびに見返すため)として記録を残します。

動機

私は、GitHub上において、同人誌のPDF生成プロジェクト(Re:VIEWプロジェクト)を管理しています。

これまでは、新刊の同人誌を執筆するにあたり、TechBoosterが配布するReVIEW-Template[1]https://github.com/TechBooster/ReVIEW-Templateをダウンロードして、新しいプロジェクトを構築していました。

この手法だとReVIEW-Templateの最新内容を適用できるというメリットがあります。しかし、私の場合はプロジェクト内のファイルを少々カスタマイズしており、ゼロから構築するとPDFが生成できる状態に持っていくまでが少し負担に感じられていました。

その悪戦苦闘については、次の記事でうかがい知ることができます。

環境構築で執筆モチベーションが下がるのは嫌なので、いつかは改善したいと考えていました。

もっともシンプルな方法は、既刊のリポジトリー(ビルドが通る=完成された状態)をコピーして再利用するという戦法でしょう。

やることは単純なのに毎回忘れてしまうので、今回は備忘録として記事にまとめることにしました。

やりたいこと

端的に言えば、「既存リポジトリーを残したまま、中身が同一である新規リポジトリーを作りたい」ということになります。

・既存リポジトリー=既刊を管理するプライベート・リポジトリー

・新規リポジトリー=新刊を管理するプライベート・リポジトリー

ただし、ローカル側でも別々のフォルダーで管理するものとします。

※前提条件として、リモートリポジトリーは自分の管理下にあります。

実現法

既存リポジトリー名を"original-repo"、新規リポジトリー名を"renamed-repo"とします。

もっとうまい方法はあるかもしれませんが、ここでは流れのわかりやすさを優先しました。

ここでは、WindowsのGit Bashを操作しているものとします。

1:元のリポジトリーをローカルにcloneする

※ただし、既刊管理用のローカルリポジトリーがある場合は、このステップを飛ばしてください。

$ git clone git@github.com:yourname/original-repo.git

2:ワーキングツリーだけ再帰コピーする

ここではcpコマンドに-rオプションを付与しています[2]コマンドプロンプトやPowerShellはcpコマンドが使えないので注意してください。

このオプションはサブディレクトリーも再帰的にコピーするためのものです。

$ cp -r original-repo renamed-repo
$ cd renamed-repo
$ rm -rf .git

明示的に.gitフォルダーを削除していますので、履歴を引き継がず、新リポジトリーとして出直している状況です。

original-repoが"book_Caesar"、renamed-repoが"book_Caesar_concise"とする。
ファイルのコピーから".git"フォルダーの削除まで。

上記のスクリーンショットでは、rmコマンド実行時に"rm: cannot remove '.git/objects’: Device or resource busy"エラーが発生しています。
このエラーは、以下のようなケースで起きることがあります。
・".git"内の一部ファイルが別のプロセスによりロックされていた。
・特に WindowsのDropboxやセキュリティソフトがアクセス中だった。
・一時的な I/O バッファの遅延。
しかしながら、再実行してエラーが起きず削除できています。タイミング的にロックが外れたためと考えられます。
プロンプトにもrmコマンド実行前までは「(master)」とありますが、実行後は消えています。このことからGitの管理下から外れたことがわかります。

3:GitHub上に新リポジトリーを作成する

ブラウザーでGitHubにアクセスして、GUIでrenamed-repoという空リポジトリーを作成します。

その際、空にするために「README を作成」はチェックしません。

WebブラウザーでGitHubにアクセスし、リモートリポジトリ(プライベート)を作成するところ

4:Git管理下に設定し、初回コミットし、ファイルをpushします。

“original-repo"と"renamed-repo"の部分は自分の環境に置き換えてください。

$ git init
$ git add .
$ git commit -m "Initial commit based on original-repo"
$ git branch -M main
$ git remote add origin git@github.com:yourname/renamed-repo.git
$ git push -u origin main

以上です。

実現法2【別解】

1:同様

2:ローカルのディレクトリーをコピーする

$ cp -r original-repo renamed-repo
$ cd renamed-repo

このコマンドにより、renamed-repoというローカルコピーが作られます。

※.git/config はコピーされるため、元リポジトリーのorigin情報がそのまま残っています。

3:同様

4:ローカルのリモート先を新リポジトリーに変更する

$ git remote remove origin
$ git remote add origin git@github.com:yourname/renamed-repo.git

5:ローカルから新リポジトリーへpushする

$ git push -u origin --all      # すべての履歴・ブランチを含めてpushする.
$ git push origin --tags        # タグもpushする.

※履歴、ブランチ、タグを引き継ぎたくない場合は適時、オプションを減らしてください。

References

References
1 https://github.com/TechBooster/ReVIEW-Template
2 コマンドプロンプトやPowerShellはcpコマンドが使えないので注意してください。

技術GitHub

Posted by ipusiron