2011-12-20 15 views
1

私はソースコードを最新の状態に保つために、異なるコンピュータ間で作業するときにgitを使用しようとしています(もともとDropboxを使用しましたが、ロケールリポジトリのアップロードと古いファイルの削除

私が理解しているように、コマンドgit pullを使用すると、リモートリポジトリから変更がフェッチされ、変更がローカルリポジトリの既存ファイルにマージされます。しかし、ローカルのリポジトリに冗長化/廃止されたファイルがある場合、自動的に削除されません。同様に、ローカルリポジトリからファイルを削除し、その変更をサーバーにプッシュすると、サーバーはその削除されたファイルを削除しません。

この問題を解決するにはどうすればよいですか?必要なコマンドは何ですか?

ありがとうございます!

+0

"サーバーは削除されたファイルを削除しません"?まあ、あなたの遠隔地の裸の貯蔵所ではないのですか? – fge

+0

これまで何もなかったような裸の存在ですか?初期プッシュまでのみ。私はしばらくそれを使用していた後もまだ古いファイルがあります。 – nf313743

+0

いいえ、「作業ツリーがありません」のように「裸」です。 githubなどが使用するもののように。 – fge

答えて

0

最も簡単な方法はgit pullを実行し、次にgit reset --hardを実行すると、リモートと一致するように強制的に作業ディレクトリがリセットされます。

1

git cleanを使用してこれらのファイルを削除できます。オプションについてはman-pageを参照してください(またはgit help cleanを実行してください)。

1

異なるリポジトリ間で通信するには、裸の状態を使用する必要があります。ノンベアから引っ張っても問題ありませんが、は、このようなreposにをプッシュすると、ローヤルPITAになる可能性があります。まあ、いいえ、それはです。ローヤルPITA:デフォルトでは、チェックアウトされたブランチにプッシュできません。

それを入れてみませんかするディレクトリを選択し、裸を作成するには:

git init --bare /path/to/repo 

その後、すべてのあなたのリポジトリに、このリモートを追加する、のはbareそれを呼びましょう:

git remote add bare [email protected]:/path/to/repo 

あなたのリファレンスレポジトリを選択し、マスターブランチにプッシュします:

git push bare master 

次に、リポジトリ内のすべてのリポジトリを、専用のブランチの下、または名前空間まで押し込みます。たとえば、マシンhost1上のリポジトリのために:

host2について同様
git push bare master host1/master 

など、あなたに合った命名規則を選択してください。すすぎ、すべてのホストとブランチのために繰り返します。

そして、必要に応じて/からプル/プルします。

さらに長期的な解決策として、配布用にパッケージ化されている場合、またはインストールして設定する場合はgitoliteを使用することをお勧めします。ステロイドのアクセス権を持つgitです。それ。

関連する問題