Git push / clone na nowy serwer


127

Właśnie uczę się Git i jest coś, czego nie mogę rozwiązać. Czy po utworzeniu i korzystaniu z repozytorium git lokalnie na moim komputerze Mac mogę przesłać kopię na inny serwer w innym miejscu? Jestem za zaporą ogniową, więc niestety nie mogę uruchomić git clonez innej maszyny.

Odpowiedzi:


137
  1. git remote add nazwa url
  2. git push nazwa gałęzi

Przykład:

git remote add origin git@github.com:foo/bar.git
git push origin master

Zobacz dokumentację git push- możesz ustawić pilota jako domyślnego pilota dla danej gałęzi; jeśli nie, nazwa originjest wyjątkowa. Wystarczy git pushsam zrobi to samo jak git push origin thisbranch (niezależnie od gałęzi jesteś na).


7
Aby uzyskać bliższy efekt jako "klonowanie wypychane", zamiast po prostu wypychać _branch_ : git push -u --allmożemy pominąć, originponieważ jest to domyślna przyjęta nazwa dla wypychania, a -utakże śledzimy zdalne gałęzie.
— cregox

13
Powinno wystarczyć utworzenie pustego, gołego repozytorium na serwerze za pomocą, git init --bare /foo/bar.gita następnie umieszczenie tam swojego lokalnego (jak w tej odpowiedzi). Nie musisz przesyłać na serwer niczego spakowanego / tarowanego.
— OderWat

1
Oddelegowanie OderWat. Na przykład wykonaj polecenie „git init --bare foo / bar.git”, gdy jesteś zalogowany do zdalnego (tj. Git@github.com), a następnie „zdalne źródło” będzie miało miejsce docelowe, do którego można wrzucić. W przypadku przykładu github, myślę, że możesz użyć interfejsu WWW github Repository / Add, a następnie postępować zgodnie z zaleceniami „Wypchnij istniejące repozytorium z wiersza poleceń”. Github zaleca użycie „-u”, aby spowodować odniesienie śledzenia.
— Dave X

Ta metoda może być kanoniczna, ale jest tępa i sprawia, że ​​git jest mniej użyteczny. Uwielbiam mnie jakimś dupkiem, ale niebiosa, ma to pewne problemy z interfejsem użytkownika ...
— Ross Rogers

Pozwoliłem sobie usunąć akapit „EDYTUJ”, który został dodany do pierwotnego pytania, przez co wyglądało na to, że ta procedura jest wątpliwa. Nie sądzę, żeby tak było, a mimo to prawdopodobnie powinien to być komentarz zamiast edycji pytania.
— Sierpień Lilleaas

75

To, co możesz chcieć zrobić, to najpierw na komputerze lokalnym utworzyć czysty klon repozytorium

git clone --bare /path/to/repo /path/to/bare/repo.git  # don't forget the .git!

Teraz zarchiwizuj nowy katalog repo.git za pomocą tar / gzip lub innego ulubionego narzędzia do archiwizacji, a następnie skopiuj archiwum na serwer.

Cofnij archiwizację repozytorium na swoim serwerze. Następnie musisz skonfigurować pilota w swoim lokalnym repozytorium:

git remote add repo-name user@host:/path/to/repo.git #this assumes you're using SSH

Będziesz wtedy mógł naciskać i pobierać ze zdalnego repozytorium za pomocą:

git push repo-name branch-name
git pull repo-name branch-name

4
Czy mógłbyś wyjaśnić komentarz „nie zapomnij o .git!”? Jaki jest sens dodawania .git na końcu folderu? Kiedy mam to zrobić? Tylko konwencja?
— lumbric

5
„.Git” to tylko nieoficjalny standard identyfikacji samego repozytorium git
— Grant Limberg,

3
Nie podążam za tym pomysłem ... czy to nie psuje całego celu konfiguracji serwera git i faktycznego używania go do „przesyłania / kopiowania / utrzymywania synchronizacji / tworzenia kopii zapasowych” zamiast spakowania i używania innej metody?
— cregox

1
Właśnie tego potrzebowałem, ponieważ oryginalne repozytorium znajdowało się w sieci, która nie miała dostępu do sieci, w której istniał serwer, do którego chciałem się wypchnąć. Pozwoliło mi to umieścić repozytorium na pudełku, do którego miał dostęp.
— michaeltwofish

3
@Cawas musisz tylko raz ręcznie spakować / skopiować / wyodrębnić repozytorium. po tym wszystko, czego potrzebujesz, to pchać i ciągnąć.
— Sparebytes

9

Istnieje wiele sposobów przenoszenia repozytoriów, git bundlejest to dobry sposób, jeśli masz niewystarczającą dostępność sieci. Ponieważ repozytorium Git jest w rzeczywistości po prostu katalogiem pełnym plików, możesz "sklonować" repozytorium, wykonując kopię .gitkatalogu w dowolny sposób.

Najbardziej efektywnym sposobem jest użycie gdzieś zewnętrznego repozytorium (skorzystaj z GitHub lub skonfiguruj Gitosis ), a następnie git push.


7
remote server> cd /home/ec2-user
remote server> git init --bare --shared  test
add ssh pub key to remote server
local> git remote add aws ssh://ec2-user@<hostorip>:/home/ec2-user/dev/test
local> git push aws master

Podoba mi się prostota Twojej odpowiedzi, ale nie jestem pewien, czy tego potrzebuję, czy nie. Mam istniejące repozytorium GIT na GitHub, a także chcę teraz wypchnąć do plików na żywo nasz serwer Ubuntu (który ma zainstalowany GIT). Czy możesz dodać kilka komentarzy, aby proces był jaśniejszy?
— Dave Everitt,

1

Możesz wypchnąć gałąź do zdalnego serwera, na przykład github . Najpierw musisz wykonać wstępną konfigurację projektu, a następnie sklonować projekt i:

git push <remote repo> <your branch>
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.