GitHub:パブリックリポジトリのフォークをプライベートにする方法は?


247

どうすれば公開リポジトリをフォークできますが、自分のフォークをプライベートにできますか?私はプライベートリポジトリをサポートするサブスクリプションを持っています。

回答:


394

答えは正しいですが、パブリックリポジトリとフォークの間でコードを同期する方法については触れません。

以下が完全なワークフローです(React Nativeをオープンソースする前にこれを行いました)。


まず、他の人が言ったようにリポジトリを複製します(詳細はこちら):

Github UIをprivate-repo介して新しいレポを作成します(これを呼び出します)。次に:

git clone --bare https://github.com/exampleuser/public-repo.git
cd public-repo.git
git push --mirror https://github.com/yourname/private-repo.git
cd ..
rm -rf public-repo.git

プライベートリポジトリのクローンを作成して、作業できるようにします。

git clone https://github.com/yourname/private-repo.git
cd private-repo
make some changes
git commit
git push origin master

パブリックリポジトリから新しいホットさを引き出すには:

cd private-repo
git remote add public https://github.com/exampleuser/public-repo.git
git pull public master # Creates a merge commit
git push origin master

これで、プライベートリポジトリにパブリックリポジトリの最新のコードと変更が追加されました。


最後に、プルリクエストを作成するにはプライベートリポジトリ->パブリックリポジトリ:

GitHub UIを使用して、パブリックリポジトリのフォーク(パブリックリポジトリページの右上にある小さな「フォーク」ボタン)を作成します。次に:

git clone https://github.com/yourname/the-fork.git
cd the-fork
git remote add private_repo_yourname https://github.com/yourname/private-repo.git
git checkout -b pull_request_yourname
git pull private_repo_yourname master
git push origin pull_request_yourname

説明するように今、あなたは、公共・レポのためにGithubのUIを介しプルリクエストを作成することができ、ここで

プロジェクトオーナーがプルリクエストを確認したら、それをマージできます。

もちろん、プロセス全体を繰り返すことができます(リモコンを追加する手順は省略してください)。


2
空のプライベートリポジトリを新しいリモートとしてパブリックリポジトリの通常のクローンに追加して、リモートにプッシュできないのはなぜですか?違いは何でしょうか?
Falko Menge 2017

@FalkoMenge同じ質問があります。読み込みgit-scm.com/docs/git-cloneを通常のように、それが聞こえるgit cloneリモート追跡の枝をセットアップすると、おそらくクローンレポでいくつかの他の設定は、あなたが本当に望んでいないこと。一方--bare cloneは、リモートから.git dirをそのままコピーするだけです。
bennlich 2017

1
また、プライベートコミットの履歴をパブリックブランチにプッシュしますか?
Sukhjinder Singh 2018

1
@Sukhjinder Singhはい、最後のステップでプライベートコミットの履歴をパブリックリポジトリにプッシュします。それを望まない場合は、コミットを公開リポジトリにマージするときにコミットを押しつぶし、すべての変更で1つのコミットをプッシュすることができます。たとえば、stackoverflow.com
questions / 5308816 / how

1
私は自分のプライベートリポジトリのクローンを作成し、変更を加えてプッシュするステップに進みました。私が行った変更はすべてgitに気づかれませんでした。git status最新のものをすべて表示し、何を変更しても作業ツリーはクリーンです。その結果、私は何もコミットしてプッシュすることはできません。これを試すためにさらに2回作成した新しいプライベートリポジトリを削除しましたが、同じ問題が発生し続けました。助言がありますか?
ウィル

92

現在、もう1つのオプションがあります(2015年1月)

  1. 新しいプライベートリポジトリを作成する
  2. 空のリポジトリ画面に「インポート」オプション/ボタンがあります ここに画像の説明を入力してください
  3. それをクリックして、既存のgithub repo urlを配置します。githubオプションの言及はありませんが、github reposでも機能します。 ここに画像の説明を入力してください
  4. 完了

19
これは少し異なりますが機能します。(私は2015年8月に試しました)。インポートオプション/ボタンが見つからなかったので、ググってこのURLになりました。import.github.com/newここでは、既存のgithubのURLを入力して[ 確認 ]ボタンをクリックできます。確認したら、新しいリポジトリの名前を入力して[プライベート]ボタンをクリックし、[ インポートの開始
Shiva

2
@MattvanAndelは、元の答えではなく、コメントが正しいことを意味すると思います。私もシヴァのコメントをフォローしましたが、うまくいきました。最初にローカルのプライベートリポジトリを作成しないでください。
David H

この方法でプライベートな「フォーク」を作成し、それを再びパブリックなフォークにしたい場合、それを行うことができますか?
AndersLindén16年

2
@Shivaコメントから回答を得る場合は賛成票を投じます。
bebbi 2017

36

現在の答えは少し古くなっているので、明確にするために:

短い答えは:

  1. やる裸のクローン公共レポのを。
  2. 新しいプライベートを作成します。
  3. やるミラープッシュ新しいプライベートものにします。

これはGitHubに記載されています:リポジトリの複製


4
アップストリームの変更をプルする方法はありますか?これはリベラルなライセンスを持つリポジトリにとって重要です-私は私のリポジトリをプライベートにしましたが、それでも上流の変更をマージしたいと思います。
amarprabhu 2014年

2
はい。他のリポジトリを新しい(追跡)リモート(例: 'other-repo')として追加し、定期的にそこから変更をフェッチしてマージする必要があります(例: 'git merge other-repo / stable')。
stefano 14

26

リポジトリを複製する必要があります

あなたはこのドキュメントを見ることができます(githubから)

フォークせずにリポジトリの複製を作成するには、元のリポジトリに対して特別なcloneコマンドを実行し、新しいリポジトリにミラープッシュする必要があります。

次の場合、プッシュしようとしているリポジトリ(exampleuser / new-repositoryやexampleuser / mirroredなど)は、GitHubにすでに存在しているはずです。詳細については、「新しいリポジトリの作成」を参照してください。

リポジトリのミラーリング

完全に複製するには、ベアクローンとミラープッシュの両方を実行する必要があります。

コマンドラインを開き、次のコマンドを入力します。

$ git clone --bare https://github.com/exampleuser/old-repository.git
# Make a bare clone of the repository

$ cd old-repository.git
$ git push --mirror https://github.com/exampleuser/new-repository.git
# Mirror-push to the new repository

$ cd ..
$ rm -rf old-repository.git
# Remove our temporary local repository

元の場所からの更新の取得など、別の場所にあるリポジトリをミラーリングする場合は、ミラーのクローンを作成して、定期的に変更をプッシュできます。

$ git clone --mirror https://github.com/exampleuser/repository-to-mirror.git
# Make a bare mirrored clone of the repository

$ cd repository-to-mirror.git
$ git remote set-url --push origin https://github.com/exampleuser/mirrored
# Set the push location to your mirror

ベアクローンと同様に、ミラークローンにはすべてのリモートブランチとタグが含まれますが、フェッチするたびにすべてのローカル参照が上書きされるため、常に元のリポジトリと同じになります。pushのURLを設定すると、ミラーへのpushが簡単になります。ミラーを更新するには、更新をフェッチしてプッシュします。これは、cronジョブを実行することで自動化できます。

$ git fetch -p origin
$ git push --mirror

https://help.github.com/articles/duplicating-a-repository


これにより、リポジトリのクローンが作成されますが、GitHubの意味ではフォークは作成されません。GitHubで実際のフォークを作成すると、フォーク名の下に「fork from exampleuser / repository-to-mirror」というテキストが表示されます。github.com/exampleuser/new-repository/network/membersに移動すると、他のすべてのフォークのツリーも表示されます。
apaatsio

20

GitHubにインポートオプションが追加され、新しくインポートしたリポジトリをパブリックまたはプライベートに自由に選択できるようになりました

Githubリポジトリのインポート


インポートはまだ大規模なリポジトリ(5日間)で実行されており、チェックアウトの方がはるかに高速ですが、それを最新の状態に保つための手順が増える可能性があります。遅いのは理解できます。masterブランチだけでなくすべてをインポートするので、私はそれがより高速であることを願っています...
Liam Mitchell

1
私は同じ答えを追加するつもりでしたが、最初にそれをしてくれてありがとう。昨年1月以降、Github Freeのプライベートリポジトリが利用可能になりました。:D
OBL
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.