Jak mogę rozwidlić publiczne repozytorium, ale ustawić prywatny widelec? Mam abonament na obsługę prywatnych repozytoriów.
Jak mogę rozwidlić publiczne repozytorium, ale ustawić prywatny widelec? Mam abonament na obsługę prywatnych repozytoriów.
Odpowiedzi:
Odpowiedzi są poprawne, ale nie wspominają o synchronizacji kodu między publicznym repozytorium a rozwidleniem.
Oto pełny obieg pracy (zrobiliśmy to przed otwartymi źródłami React Native ):
Najpierw zduplikuj repozytorium, jak powiedzieli inni (szczegóły tutaj ):
Utwórz nowe repozytorium (nazwijmy to private-repo
) za pomocą interfejsu użytkownika Github . Następnie:
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
Sklonuj prywatne repozytorium, aby móc nad nim pracować:
git clone https://github.com/yourname/private-repo.git
cd private-repo
make some changes
git commit
git push origin master
Aby pobrać nową popularność z publicznego repozytorium:
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
Niesamowite, twoje prywatne repozytorium ma teraz najnowszy kod z repozytorium publicznego oraz twoje zmiany.
Wreszcie, aby utworzyć żądanie ściągania prywatne repo -> repo publiczne:
Użyj interfejsu GitHub, aby utworzyć rozwidlenie publicznego repozytorium (mały przycisk „Widelec” w prawym górnym rogu strony publicznego repozytorium). Następnie:
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
Teraz możesz utworzyć żądanie ściągnięcia za pomocą interfejsu Github dla publicznego repo, jak opisano tutaj .
Gdy właściciele projektu sprawdzą twoje żądanie ściągnięcia, mogą je scalić.
Oczywiście cały proces można powtórzyć (pomiń kroki, w których dodajesz piloty).
git clone
skonfigurował zdalne gałęzie śledzenia i może inną konfigurację w klonowanym repozytorium, której tak naprawdę nie chcesz. Podczas gdy klon --bare po prostu kopiuje .git dir z pilota tak jak jest.
git status
pokazuje wszystko na bieżąco, działające drzewo czyste bez względu na to, co zmienię. W związku z tym nie mogę niczego zatwierdzać i naciskać. Usunąłem nowe prywatne repozytorium, które zrobiłem jeszcze 2 razy, aby spróbować, ale wciąż napotykałem ten sam problem. Jakieś sugestie?
Teraz jest jeszcze jedna opcja (styczeń 2015)
Obecne odpowiedzi są nieco nieaktualne, więc dla jasności:
Krótka odpowiedź brzmi:
Jest to udokumentowane w GitHub: repozytorium-repozytorium
Musisz zduplikować repozytorium
Możesz zobaczyć ten dokument (z github)
Aby utworzyć duplikat repozytorium bez rozwidlenia, musisz uruchomić specjalne polecenie klonowania w stosunku do oryginalnego repozytorium i przesłać lustro do nowego.
W następujących przypadkach repozytorium, do którego próbujesz wypchnąć - jak exampleuser / new-repository lub exampleuser / mirror - powinno już istnieć na GitHub. Aby uzyskać więcej informacji, zobacz „Tworzenie nowego repozytorium”.
Mirroring repozytorium
Aby wykonać dokładny duplikat, musisz wykonać zarówno nagi klon, jak i odbicie lustrzane.
Otwórz wiersz poleceń i wpisz następujące polecenia:
$ 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
Jeśli chcesz wykonać kopię lustrzaną repozytorium w innej lokalizacji, w tym pobrać aktualizacje z oryginału, możesz sklonować kopię lustrzaną i okresowo wprowadzać zmiany.
$ 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
Podobnie jak w przypadku samego klonu, klon lustrzany zawiera wszystkie zdalne gałęzie i znaczniki, ale wszystkie lokalne odniesienia będą nadpisywane przy każdym pobieraniu, więc zawsze będzie takie samo jak oryginalne repozytorium. Ustawienie adresu URL dla wypychań ułatwia wypychanie do lustra. Aby zaktualizować serwer lustrzany, pobierz aktualizacje i wypchnij, które można zautomatyzować, uruchamiając zadanie CRON.
$ git fetch -p origin $ git push --mirror
GitHub ma teraz opcję importu, która pozwala wybrać, co chcesz, aby nowe importowane repozytorium było publiczne lub prywatne