🤔

Gitで親を持たない空ブランチを作成する

2021/07/04に公開

GitHubのREADME.mdにスクリーンショットを載せようとした時、
画像をどこに置いたら良いのかという問題にぶち当たった。

先人がどうやってるのか

外部サービスに画像をアップロードする

GoogleドライブやDropbox等に画像をアップロードして、
そこのURLをREADME.mdで使用する。

GitHub上のフォームでアップロードする

GitHubでREADME.mdに画像を使用したい
S3に画像が登録されるみたいなので、そのURLをREADME.mdで使用する。

画像格納用のbranchで管理する

git checkout --orphan images
git rm -rf .
git add sample-image.jpg
git commit -m "画像をコミット"
git push origin images

下記のようなURLで参照出来る。

https://raw.githubusercontent.com/[user_name]/[repository_name]/images/sample-image.jpg

ちなみに--orphanって何か

git-checkout(1)より引用。

--orphan <new_branch>
新しい親のいない(orphan)ブランチを <new_branch> という名前で、<start_point> を開始点として作成し、そこに切り替えます。この新しいブランチ上に対して作られる最初のコミットは、親コミットがなく、その他のすべてのブランチおよびコミットから切り離された、 新しい歴史の root コミットとなります。

インデックスとワーキングツリーは、直前に "git checkout <start_point>" を実行したかのように調整されます。これにより、単に "git commit -a" の実行で root コミットを作成することで、 <start_point> と同様のファイルを記録した新しい歴史を開始できます。

このオプションはあるコミットのツリーを、その完全な歴史を晒さずに公開したい場合に便利です。現在のツリーは "クリーン" でも、その完全な歴史にはプロプライエタリまたは公開するのに邪魔なコード片を含むようなプロジェクトにおいて、オープンソースなブランチを公開したい場合があるかもしれません。

<start_point> とは完全に異なるファイルを記録した、切り離された歴史を開始したい場合、orphan ブランチを作成した直後にワーキングツリーの一番上のディレクトリで "git rm -rf ." を実行することで、インデックスとワーキングツリーを綺麗にしてください。その後、ファイルを他の場所からコピーする、 tarball を展開する、等によりワーキングツリーを再作成することで 新しいファイルを準備することになります。

結果

外部サービスで画像を管理しても良いんですが、間違って画像削除とかやりそうなので、
Gitに画像管理用ブランチ作って管理する方法を取りました。

同じリポジトリ内で完結するので、この方が良いですね。

Discussion