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.