gitリポジトリを別のディレクトリに移動し、そのディレクトリをgitリポジトリにする方法は?


101

私はディレクトリgitrepo1を持っています。このディレクトリはgitリポジトリです。

  • このgitrepo1を別のディレクトリnewrepoに移動したいと思います。

  • ディレクトリnewrepoは、git履歴を失うことのない新しいgitリポジトリである必要があり、ディレクトリgitrepo1が含まれている必要があります。

  • ディレクトリgitrepo1は、インデックスのない現在のディレクトリ(newrepo内)である必要があり.gitます。つまり、独立したgitリポジトリやサブモジュールではなくなります。

これどうやってするの?


9
mv girepo1 newrepo??
ddavison 2013

回答:


109

とても簡単です。Gitはそのディレクトリの名前が何であるかを気にしません。何が入っているかだけが気になります。だからあなたは単に行うことができます:

# copy the directory into newrepo dir that exists already (else create it)
$ cp -r gitrepo1 newrepo

# remove .git from old repo to delete all history and anything git from it
$ rm -rf gitrepo1/.git

リポジトリが大きく、履歴が長い場合、コピーは非常に高価になることに注意してください。あなたもそれを簡単に避けることができます:

# move the directory instead
$ mv gitrepo1 newrepo

# make a copy of the latest version
# Either:
$ mkdir gitrepo1; cp -r newrepo/* gitrepo1/  # doesn't copy .gitignore (and other hidden files)

# Or:
$ git clone --depth 1 newrepo gitrepo1; rm -rf gitrepo1/.git

# Or (look further here: http://stackoverflow.com/q/1209999/912144)
$ git archive --format=tar --remote=<repository URL> HEAD | tar xf -

を作成するnewrepoと、配置gitrepo1する場所は、どこにいても構いnewrepoません。必要に応じて内部に配置することもできます。手順を変更するのではなく、書きgitrepo1戻すパスを変更します。


6
+1。これはおそらく、言及する価値がこの落とし穴 gitのバージョン1.7.8または1.7.9で作成したリポジトリに影響を与えることを- (示されているように、それは簡単に修正していますが)gitのレポは、それが使用できなくなり移動を意味することができました。
AD7six 2013

1
私はウィンドウズマシンにいて、コマンドプロンプトを使用しています。「cp」コマンドが見つかりませんでした。「cp」コマンドは他のOSに固有ですか?
LP13

1
@ user3862378、、cpほとんどすべてのコマンドや関数が他のOSに固有であるように。実際、これはWindows以外のすべてのOSに固有のものです。マイクロソフトに電話して、なぜPOSIXでないのかを尋ねてみてください。とにかく、cpコピーを意味します。mv移動を意味します。rm削除を意味します。同等のウィンドウを見つけることができます。
Shahbaz 2015

@Shahbazおかげで、上記のソリューションでは、「newrepo->。git」と「newrepo-> gitrepo1からの他のすべてのファイル」という構造が作成されます...「gitrepo1」フォルダが「newrepo」内に配置されません。ウィンドウで手動でフォルダを作成し、ルートフォルダの下に「.git」フォルダを移動すると、履歴に影響を与えずに機能しますか?
LP13

2
@ user3862378、そうすべきではない理由はありません。.git/最新のコミットを含むすべての履歴が含まれます。どこに置いても、すべての歴史があります。実際、そのディレクトリ内のすべてのファイルが、元のリポジトリとは異なる場合.git/、唯一のことは、いくつかのファイルが削除され、いくつかの追跡されていないファイルが存在することを通知することです。を使用するgit reset --hardと、削除されたファイルは自動的に復元されます!注意すべきことは、コピーしただけで.git/はコミットされていない変更を回復できないことです。
Shahbaz

4

それは少し遅れており、質問はすでに回答されていますが、頭痛なしにそれを行うには:

  1. 古いgitフォルダーにある現在のブランチを確認するには、git statusブランチの開発としましょう
  2. ディレクトリを新しいgitフォルダーに変更しgit clone、プロジェクトをリポジトリから新しいフォルダーに変更します。
  3. 新しいフォルダーの現在のブランチをチェックアウトします。 git checkout development
  4. .gitフォルダーを除いrsync、新しいフォルダーを古いフォルダーと同期しますrsync -azv --exclude '.git' gitrepo1 newrepo/gitrepo1

次に、中断したところから続行してください。


1

それよりもさらに簡単です。これを行っただけです(Windowsでは、他のOSでも動作するはずです)。

  1. newrepoを作成します。
  2. gitrepo1newrepoに移動します
  3. 移動.gitからgitrepo1newrepo(1つのレベル上)。
  4. 変更をコミットします(必要に応じて追跡を修正します)。

Gitは、ディレクトリを追加し、一連のファイルの名前を変更したことを確認します。大したことはありません。


1

私はエキスパートではありませんが、.gitフォルダーを新しいフォルダーにコピーして、次のコマンドを実行します。 git reset --HARD

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.