Jak wykonać wstępne wypychanie do zdalnego repozytorium za pomocą Git?

173

Przeczytałem niezliczone samouczki i ciągle opisuję krótko. Oto co mam:

- Używam RubyMine na moim pulpicie Windows
- Zainstalowałem Git na moim koncie hostingowym WebFaction zgodnie z ich instrukcjami
- Wydaje się, że Git działa dobrze na obu komputerach

Oto co robię:
1. Na serwerze:
         a. projekt mkdir
         b. git init
         c. git add.
         re. git commit <--- "nic do zatwierdzenia"
2. Na kliencie:
         a. Utwórz nowy projekt w RubyMine.
         b. „git init” w głównym katalogu projektu
         c. "Wypchnij zmiany" na serwer <---- "nie udało się przesłać niektórych odnośników do ...".

Jakie kroki mi brakuje?

Donald Hughes
źródło

Odpowiedzi:

393

Na serwerze:

mkdir my_project.git
cd my_project.git
git --bare init

Na kliencie:

mkdir my_project
cd my_project
touch .gitignore
git init
git add .
git commit -m "Initial commit"
git remote add origin [email protected]:/path/to/my_project.git
git push origin master

Zwróć uwagę, że po dodaniu źródła istnieje kilka formatów i schematów, których możesz użyć. Polecam zapoznać się z usługami hostingowymi.

Josh Lindsey
źródło
Jedyną rzeczą, którą zmieniłem, odkąd pracuję poza RubyMine, jest to, że zastąpiłem touch .gitignore utworzeniem projektu railsów z 66 domyślnymi plikami. Dziękuję Ci bardzo!
Donald Hughes,
Uznanie za wyświetlenie poleceń. W ten sposób skonfigurowałem również zdalne repozytoria.
Dave Bacher,
5
Powinienem dodać, że jeśli chcesz, aby inne osoby współpracowały z tobą przy tym repozytorium, powinieneś dodać --sharedna końcu git --bare initpolecenia. Spowoduje to skonfigurowanie niezbędnych uprawnień.
Josh Lindsey,
Dzięki za tę odpowiedź. Bardzo pomocne jest posiadanie takich rzeczy, które uzupełniają brakujące rzeczy w bardzo dobrych książkach o git, ale nadal nie obejmują wielu prac konwersji z CVS.
octopusgrabbus
21
Lubię biegać git push --set-upstream origin masterzamiast git push origin masterpierwszego razu. To pozwala mi za każdym razem pisać git pushlub git pullzamiast tego git push origin master. Cokolwiek pasuje do Twoich preferencji.
Rick Smith
8

Możesz spróbować tego:

na serwerze:

dodanie nowej grupy do /etc/grouppolubienia (przykład)

mygroup:1001:michael,nir

utwórz nowe repozytorium git:

mkdir /srv/git
cd /srv/git
mkdir project_dir
cd project_dir
git --bare init (initial git repository )
chgrp -R mygroup objects/ refs/ (change owner of directory )
chmod -R g+w objects/ refs/ (give permission write)

na klienta:

mkdir my_project
cd my_project
touch .gitignore
git init
git add .
git commit -m "Initial commit"
git remote add origin [email protected]:/path/to/my_project.git
git push origin master

(Dzięki Josh Lindsey za stronę klienta)

po kliencie wykonaj na serwerze następujące polecenia:

cd /srv/git/project_dir
chmod -R g+w objects/ refs/

Jeśli otrzymałem ten błąd po git pull:

There is no tracking information for the current branch. Please specify which branch you want to merge with. See git-pull(1) for details

git pull <remote> <branch>
If you wish to set tracking information for this branch you can do so with:

git branch --set-upstream new origin/<branch>

próbować:

git push -u origin master

To pomoże.

Michael
źródło
5

Przed zatwierdzeniem musisz dodać co najmniej jeden plik do repozytorium, np .gitignore.

Benjamin Wohlwend
źródło
Wydaje mi się, że sposób, w jaki próbuję go użyć, polega na dodaniu plików początkowo od mojego klienta, ponieważ tam piszę kod. Czy to koncepcyjnie nie na miejscu w git? Czy muszę najpierw zatwierdzić na kliencie, a następnie wypchnąć na serwer?
Donald Hughes,
5

Jeśli twój projekt nie ma gałęzi nadrzędnej, to znaczy, jeśli jest to pierwszy raz, gdy repozytorium zdalne dowie się o gałęzi utworzonej w repozytorium lokalnym, następujące polecenie powinno działać.

git push --set-upstream origin <branch-name>
Maria
źródło
3

@Josh Lindsey odpowiedział już doskonale. Ale chcę dodać trochę informacji, ponieważ często używam ssh.

Dlatego po prostu zmień:

git remote add origin [email protected]:/path/to/my_project.git

do:

git remote add origin ssh://[email protected]/path/to/my_project

Zauważ, że dwukropek między domeną a ścieżką już nie istnieje.

JWo
źródło
1

Musisz skonfigurować zdalne repozytorium na swoim kliencie:

git remote add origin ssh://myserver.com/path/to/project
Dave Bacher
źródło
Uruchomiłem to polecenie, ale „git push origin master” nadal powoduje „nieudane przesłanie niektórych referencji”. Próbowałem wykonać „git pull origin master” i otrzymałem „nie mogłem znaleźć zdalnego wzorca referencyjnego”.
Donald Hughes,
Nie jestem pewien, czy to robi różnicę, ale moje zdalne repozytoria są tworzone git --bare initzgodnie z zaleceniami @Josh Lindsey.
Dave Bacher,
miałem ten sam problem „nie udało się przesłać niektórych referencji” ... próbowałem przekazać gałąź główną z repozytorium do tej, którą utworzyłem ... potem zauważyłem, że źródło nie ma gałęzi głównej - upewnij się, że gałąź, którą próbujesz to push istnieje :)
Datum Geek