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.

Sójka
źródło

Odpowiedzi:

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

Przykład:

git remote add origin [email protected]: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).

Hobbs
źródło
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. [email protected]), 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
Grant Limberg
źródło
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.

Greg Hewgill
źródło
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
jazzed
źródło
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>
Cesar
źródło