githubのgitリポジトリを同じ組織にコピー/フォークします


82

2つの異なるドメインにデプロイされたWebアプリケーションを含むリポジトリがgithubにあります。アプリケーションには、デプロイ先のドメインに応じて動作が異なるように、あちこちにわずかなロジックフォークがあります。

ドメインごとに1つずつ、2つの別々のリポジトリに分割したいところまで来ました。

Githubでは同じ組織にフォークすることはできません。「gitduplicaterepo」を検索すると、クローンを公開してミラープッシュする必要がありますが、それは両方のリポジトリの同期を維持するためのようです。これはやりたくないことです。

これについて行くための最良の方法は何ですか?可能であれば、古いコミット履歴を新しいコピーに保存したいと思います。


1
実際には、git clone --baregit push --mirrorオプションはまさにあなたが望むものです。これは、両方のリポジトリの同期を維持しません。ただし、すべてのブランチ、タグなどを含むすべてを保持します。これを一時ディレクトリで実行してコピーを作成します。次に、プロジェクトディレクトリのリモートから直接新しいコピーのクローンを作成します。
非常に優れた人

回答:


103

新しいリポジトリを作成し、作業コピーからそのリポジトリにプッシュするだけです。

git clone git@github.com:me/myrepo-original
cd myrepo-original
git remote set-url origin git@github.com:me/myrepo-new
git push origin master

これでmyrepo-new、と同じ新しいリポジトリが作成されましたmyrepo-original


3
わかりました、そしてこれらはお互いを追跡しませんよね?それらが2つの別々の切断されたリポジトリになることを意味しますか?それが私が欲しいものです。
jemminger 2014年

3
push明示的に変更しない限り、どちらのリポジトリも更新されず、「新しい」リポジトリは古いリポジトリとの関係を表示しません。
larsks 2014年

ありがとう!これが私に必要なもののようです。
jemminger 2014年

3
また、すべての枝をプッシュすることができます:git push --all origin
マリウス

これは私にとってはうまくいきましたが、URLの別の形式に変更する必要がありました:$ git remote set-url github.com/me/myrepo-new.git
Enfors

15

フォーク関係が必要ない場合(たとえば、何らかの理由で何らかの分離された代替リポジトリが必要な場合)、Googleが見つけたアウトラインとしてリポジトリを複製すると、larsksの回答で問題ありません。

フォークにたい場合は、Githubサポート(support@github.comまたはhttps://github.com/support)に連絡してください。同じ組織にフォークが作成されます。(アカウント内のリポジトリ名は一意である必要があるため、これについても気になりません。リポジトリの代替名を指定するだけで済みます。)


更新:ユーザーのSteve Riceは、以下のコメントで、GitHubサポートが、現在/今後アカウントに2番目のフォークを設定しないと述べていると報告しています。

GitHubは最近、同じアカウントにリポジトリをフォークするための可能な代替案に関する記事を投稿しました。あなたはここでその記事を読むことができます


4
サポートに連絡し、回答:「現時点では、アカウントが同じネットワーク内の2つのリポジトリを所有することはできません。」代わりに、ミラーリポジトリを設定することをお勧めします。
スティーブライス

ああ、それは最悪だ。申し訳ありませんが、彼らがポリシーを変更したことを知りませんでした:(
Nevik Rehnel 2014年

10

ページ上部の[ + ]メニューにあるGithubの[リポジトリインポート]オプションを使用するか、単に開きます

https://github.com/new/import

これにより、コピーされたリポジトリの正確な内容で新しいリポジトリが作成されます。欠点(Iarsksによるgitコマンドの回答と同じ)は、Githubのフォークとしてカウントされないことです。


このオプションを機能させることができなかったのはなぜですか?再テストしたところ、2つの簡単なステップで機能します。または、githubでローカルリポジトリを作成し、そこでインポート機能を使用します(例:github.com/sarob/mytest/import)
sarob

GHE vs github.comに問題がある可能性がありますが、そこでは機能しません。
serraosays

4

もう1つの方法は、現在のリポジトリのリモートとして、コピーする元のリポジトリを追加することです。

#create a new repo in the org1 organization called myrepo-new

ローカルターミナルで、次を実行します。

git clone git@github.com:org1/myrepo-new
cd myrepo-new
git remote -v #shows current repo link on github as origin
git remote add name-for-remote https://github.com/org1/repo-old
git remote -v #shows repo-old as name-for-remote
git fetch  name-for-remote
git merge name-for-remote/branch-to-get-from-remote
#Now fix any conflicts if present
#If number of files/commits is very high, the desktop client may hang when you try to commit your changes after merge. Try switching to Git Shell if this happens.
git status 
git commit -m "commit message"
git push origin master

1

代替ソリューション:

新しい組織を作成し、そこでフォークします。リポジトリが非公開の場合、新しい組織でも非公開のままになります。次に、外部の開発者またはフォークされたリポジトリへのアクセスを許可すると、PRを元のリポジトリに戻すことができます。


-2

ローカルフォルダを複製して、gitのものを削除することはできませんでした:

rm -rf .git*

次に、そのフォルダに新しいリポジトリを作成しますか?よりクリーンで簡単なようです。


2
削除./.git/しても、「可能であれば古いコミット履歴を新しいコピーに保存する」というOPの意図は役に立ちません。
MarkHu 2018
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.