2011-01-14 12 views
3

水銀では、私はhg up 00を実行して作業ディレクトリを完全に削除することに慣れていました。git作業ディレクトリを完全にきれいにするには?

これは、hg initを実行した直後の状態に作業ディレクトリをリセットします。

gitに相当するものはありますか?

は、コミットされた最初のリビジョンに更新されるhg up 0と同じではなく、入力するのが短くても短い2文字をhg up nullに相当することに注意してください。 * 8 ')

また、rm -rf *をgit作業ディレクトリのルートに置いておきたい場合は、git statusはすべてのファイルを削除済みとして表示することに注意してください。リポジトリを最初のコミットの前の状態に更新したいだけです。悲しいかな私のウェブ検索では、gitのマニュアルでは、私はgitでそれを行う方法を理解するために必要な情報を私に提供していません。

バックグラウンドとして、後で別のコミットを簡単にチェックアウトできるように、リポジトリをそのまま残したいと思います。私がこれをしたい理由の1つは、非常に大きなリポジトリ(実際にはgit svn repo)を持っていて、もう一度それを再クローンしなければならないことを望んでいないということです(完了まで数日かかりました。 gitsvnリポジトリをクローンしなければならない)。私はそれを必要としないときに作業コピーが取ったスペースを解放することができるようにしたいと思います。

+0

そして.gitディレクトリを削除したくないのですか? –

+0

これは奇妙なことです。空白のレポにリセットする場合は、単に空のレポを作成するだけではありません。もしあなたがなぜこれをしたいのか説明したら、いくつかのgitのような提案を得るかもしれません。 – Abizern

+0

@Nylon - これは 'git init'の前の状態にリセットされます。オペレーションは 'git init'の直後の状態にロールバックしようとしています – Abizern

答えて

2

をヌル改正の同等はgitのに裸のリポジトリと呼ばれている:

2 - あなたが発行して(初期はまだ残りますコミット)コミット初期にリセットすることができます。 This searchは、トピックの概要を示しています。ベア以外のものをベアレポに変換するさまざまな方法は、hereです。

hgとは異なり、裸のリポジトリと非裸のリポジトリを簡単に切り替える方法はありません。プッシュでgitのインデックスは変更されますが、作業ツリーは更新されないため、非ベアリポジトリにプッシュしないでください。詳細は、Working with git from 2 laptops with no bare repoを参照してください。

+0

ルーディーに感謝、私の知識の中に空白が埋まっているので、私にとってうまくいくものを見つけ出すことができました。基本的には、git clone --bare -l gitsvn.partial gitsvn.partial.bare/.git'を使用して部分を作成する必要があります(次に、 'rm -rf gitsvn.partial'で領域を再利用できます)。私は 'git clone -l gitsvn.partial.bare gitsvn.partial'を使うことができます。ハードリンクを使用しているので、最初はとても速いですが、作業ディレクトリを更新する必要があるため、ハードリンクを取り戻すにはかなり時間がかかります。それでも、それは再クローニングよりもはるかに速くなります。 –

2

これは珍しいことですが、gitブランチは通常は空ではない最初のコミットから開始します。この最初のコミットの前に通常のgitコマンドで「チェックアウト」や「リセット」することはできません。

このコマンドを使用すると、現在のチェックアウトブランチを新しい初期コミットの準備ができていない状態にリセットできます。

git updated-ref -d "$(git symbolic-ref HEAD)" 

これは、現在チェックアウトされているブランチを削除します。

このコマンドでインデックスからすべてのファイルを削除できます(リポジトリのルートにいると仮定します)。

git rm -r --cached . 

あなたがunstaged変更がある場合は、-fスイッチが必要な場合があります。

最後に、このコマンドを使用して作業ツリーからすべてのファイルを消去できます。 警告:潜在的に危険な

1 - あなたはあなたの作業ディレクトリから.gitディレクトリを削除することができますし、あなたの作業ディレクトリにはgitリポジトリは存在しません:

git clean -fd # WARNING, dangerous 
+0

Charlesに感謝しますが、テストレポで試してみましたが、' git status'はすべてのファイルが削除済みであることを示しています。私が思うほどの参考文献についてもっと学ばなければならないでしょう。 'hg'バックグラウンドから来て、私はまだ' git'に文化ショックのビットを見つけています。 –

+0

@マークブース:3つのコマンドをすべて実行しましたか?結局、すべてのファイルがインデックスと作業ツリーから削除されているはずです。これはあなたが望むものではありませんか? –

+0

チャールズ、ありがとう、私は新しいテストレポでもう一度試してみたように、コマンドを誤って最初に適用する必要があります。問題は今、私はどのように特定のリビジョンに戻すのか分からないということです。私は 'git update-ref'のマニュアルページを見てきましたが、それをまだ消化しているとは言えません。 –

1

これらは、私の心に来るソリューションです。

git reset --hard `git rev-list HEAD | tail -n 1` 
+0

これは一般的には便利ですが、巨大なgit svnレポでは、私はそれほど助けにならないと思っています。最初のコミットは元々のSVNリポジトリの一部分です。 –

関連する問題