2012-03-23 13 views
48

私はリモートのgitリポジトリを持っていて、古いSCMのものをすべて置き換えました。長年に渡って多くのプロジェクトや製品がリポジトリに追加されています。既存のものから新しいgitリポジトリを作成する方法

興味がある製品に対応するこのレポにブランチがあります。 私はこのブランチからブランドの新しいgitリポジトリを作成したいだけで、実際には履歴の消失は心配していません。

git remoteはソリューションを追加しますか?私はこれらのリポジトリの両方が同じサーバー上にあることを望んでいます。

思考?

答えて

54

既存のリポジトリから新しいGitリポジトリを作成するには、通常、新しいベアリポジトリを作成し、既存のリポジトリから新しいリポジトリに1つ以上のブランチをプッシュします。

次の手順では、このことを示しています

  1. は、新しいリポジトリを作成します。あなたがそれにプッシュするためにはベアでなければなりません。

    $ mkdir /path/to/new_repo 
    $ cd /path/to/new_repo 
    $ git --bare init

    :あなたの新しいリポジトリは、既存のリポジトリからアクセス可能であることを確認してください。これを行うには多くの方法があります。 ssh://my_host/new_repoでアクセス可能にしたとします。

  2. 既存のリポジトリからブランチをプッシュします。たとえば、ブランチtopic1を既存のリポジトリからプッシュし、新しいリポジトリにmasterという名前を付けたいとします。

    $ cd /path/to/existing_repo 
    $ git push ssh://my_host/new_repo +topic1:master

この手法では、既存のブランチからの履歴を保持することができます。

+6

リモートリポジトリに定期的にプッシュする場合は、 'git remote origin origin ssh:// my_host/new_repo'には良い助言になるでしょう。こうしてあなたは 'git push origin [branchname]'を実行します。 UNCファイルを使用する場合(windowssharesの場合など)は、必ず以下のようにリモート原点を追加してください: 'git remote add origin" // server_name/myapp/"' –

+1

ありがとうございます。それを働かせる。 –

13

履歴を失う心配がない場合はgit checkout mybranchを実行し、ディレクトリの内容を別のフォルダにコピーします。そのフォルダ内には、その後、.gitフォルダを削除して:

git init; git commit -a -m "Imported from project Y" 
+1

元のレポのコミット履歴を保持しますか? –

+11

@MikeGraf:いいえ、答えの最初の文章の最初の部分で指摘されているように:*「あなたが歴史を失うことを心配していないなら...」* –

+1

.gitignoreも削除/編集する必要があります。上記のコマンドを実行すると、コミット中に重要なファイルが残されます。 – Dave

15

は、通常のように枝をプルダウンし、次にあなたがgit initを使用して作成した新しいリポジトリにブランチをプッシュします。

git push url:///new/repo.git TheBranchFolder 

この方法では、これがプラスの場合は以前のすべての変更も保持されます。

+0

私のレポへのsshアクセスを使用していますが、あなたのレスポンスにURLの代わりにそれを使用できますか? – reza

+0

あなたはそうすることができるはずです。 – JustinDoesWork

+0

reza:そうですね、sshのURLはちょうど別の種類のURLと考えています。 – amcnabb

関連する問題