LoginSignup
11
11

More than 5 years have passed since last update.

ローカルの Git リポジトリ消して大丈夫? を確かめる

Last updated at Posted at 2015-03-11

経緯

少し前にローカルのリポジトリを整理したくなった。

Bitbucket や GitHub に複製があれば良いので、しばらく使っていない不要なローカルリポジトリは消してしまおうかな。
でも「全ての必要なファイルは復旧できること」「消してしまうファイルは不要なものだけであること」はちゃんと確認したいな。

という感じ。自分で確認した事項と、実施した手順を書いておく。

確認した事項

  1. ローカルの最後のコミットからファイルの変更がない
  2. ローカルのコミットが全てリモートに存在している
  3. "Git が無視しているファイル" は全て消してよいか

意外と 3. を忘れがち。
例えばディレクトリごと無視している logs に大事なファイルが紛れ込んでいるケースがある。
うっかりまるごと消すとどこにも複製がなく、取り返しがつかない。

手順(コマンド)

というわけで、 1. 2. 3. のコマンドを以下に書き留めておく。

1. ローカルの最後のコミットからファイルの変更がない

$ git status --porcelain
$

何も表示されなければ OK

2. ローカルのコミットが全て origin に存在している

$ git log --branches --not --remotes=origin
$

これも何も表示されなければ OK
branches というオプション名だけれど、実際は commit 毎の単位を指しているようだ(?)。

なおこの not での否定は複数にできる。

もし複数のリモートリポジトリがあるとして、例えば origin と origin2 のどちらかに存在していれば構わないときは、

$ git log --branches --not --remotes=origin --remotes=origin2
$

とすればいい。

3. "Git が無視しているファイル" は全て消してよいか

さてこれが問題。

git check-ignore すれば、そのファイルが無視されているか調べることができるらしい。

なので find コマンドで全てのファイルを列挙し、 xargs で渡すことにした。

実行例:

$ find . -type f -print | xargs git check-ignore
./.DS_Store
./.python-version
./bin/.DS_Store
./bin/__pycache__/main.py

これらは目視で確認した。
よし、このリポジトリは消しても大丈夫そうだ。

参考

http://git-scm.com/docs/git-log
http://qiita.com/marutanm/items/1401e15e249e8f48b645
http://stackoverflow.com/questions/2657935/checking-for-a-dirty-index-or-untracked-files-with-git
http://stackoverflow.com/questions/466764/show-ignored-files-in-git

免責

「この内容の通り確認した後 rm -rf したら△△と○○が消えてしまった!」ということがあっても、筆者は何も保証しません。

余談

それでも怖い時は tar で固めて暗号化して Amazon S3 に置くという手がある。

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