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?

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 youruser@yourserver.com:/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.


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 youruser@yourserver.com:/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.


5

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


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>

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 youruser@yourserver.com:/path/to/my_project.git

do:

git remote add origin ssh://youruser@yourserver.com/path/to/my_project

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


1

Musisz skonfigurować zdalne repozytorium na swoim kliencie:

git remote add origin ssh://myserver.com/path/to/project

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
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.