LoginSignup
1
1

More than 5 years have passed since last update.

Gitリポジトリから一部のテキストを抜き出して翻訳を始めるまでにかかった3日

Posted at

はじめに

これは私があるリポジトリの翻訳をするために試行錯誤したもののなれの果てです。どうかみんなはこれを見て屍を越えてくれ……。

Gitでごちゃごちゃやった内容

やりたかったこと

CommonMarkには、README.mdの他にspec.txtというCommonMarkの仕様書が入っている。翻訳をしようとするが、ここにはほかのファイルもあって全部Cloneするのは面倒そうだった。そこで、README.mdとspec.txtのみをリポジトリから引っ張ってきて、翻訳対象のみをgithubで管理。あわよくばその後の更新も追随できるようにしたかった。したかった……。

ちなみに環境は

Windows 10
git version 2.13.1.windows.2

Take away

sparse-checkoutはこの用途には向かない。filter-branchで頑張るしかない。

やったこと

sparse-checkout

Gitで他のリポジトリから一部のファイルのみをcloneする方法というのを見つけた。ふむ、sparse-checkoutなるものがあるのか。

とりあえずやってみた。調べると多くはcloneするものが多かったが、こちらのサイトでは最初から一部を抜き出す方法でやっていたのでこれに従う。

git init
git config.sparsecheckout true
git remote commonmark https://github.com/commonmark/CommonMark.git
echo "README.md" > .\.git\info\sparse-checkout
echo "spec.txt" >> .\.git\info\sparse-checkout
git pull commonmark master

おお、できてるできてる。確かに2つしか入ってないぞ。

commonmark1.PNG

これをpushしてgithubで管理で切れば完璧だ。しかし……

commonmark2.PNG

現実は甘くなかった。sparse-checkoutはあくまで一部をcheckoutして作業ディレクトリに出す機能なので、ブランチには全部のファイルが残っているのである。巨大なリポジトリの一部のみ編集したいというときのための機能だろう。しかし、これでは今回は意味がない。一部を残してきれいさっぱり消滅させたいのだ。

filter-branch

どうもfilter-branchでそういうことができるらしい。巷では最強のオプションと呼ばれているとか。強い。しかし調べてみても「特定のファイルのみ除外する」のは簡単でも、「特定のファイルのみ残す」というのはあまり想定されていないようだった。サブディレクトリはできるんだけど……。地道にrmで消していくしかない。

git filter-branch --tree-filter 'rm -f 消したいファイルとか' -f HEAD

commonmark3.PNG

重要文書焼却ってこんな気持ちなのかな……。
CommonMarkの歴史は重く、風呂に入って洗濯物をたたんでもまだ終わっていなかった。そしてrmの使いかたが間違っており2度fatal errorで停止した。

commonmark4.PNG

今度はうまくpushできた。コミットツリーもそのまま残っている。

結論

2,3ファイルだけだし手動で引っ張ってきた方が早い。

1
1
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
1
1