Як зробити початковий перехід до віддаленого сховища за допомогою Git?


173

Я прочитав незліченну кількість навчальних посібників, і я невдовзі підходжу. Ось що я маю:

- Я запускаю RubyMine на своєму робочому столі Windows
- я встановив Git на свій обліковий запис хостингу WebFaction відповідно до їх інструкцій
- Git, здається, працює на обох машинах

Ось що я роблю:
1. На сервері:
         a. mkdir проект
         b. git init
         c. git add.
         г. git commit <--- "нічого робити"
2. Про клієнта:
         a. Створіть новий проект у RubyMine.
         б. "git init" у верхньому каталозі проекту
         c. "Натиснути зміни" на сервер <---- "не вдалося натиснути кілька оновлень на ...".

Яких кроків я пропускаю?

Відповіді:


393

На сервері:

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

Про клієнта:

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

Зауважте, що додаючи початкове джерело, ви можете використовувати кілька форматів та схем. Рекомендую ознайомитись із тим, що надає ваша хостинг


Єдине, що я змінив, оскільки я працюю над RubyMine, - це те, що я замінив сенсорний .gitignore на створення проекту рейлів з його 66 файлами за замовчуванням. Велике спасибі!
Дональд Х'юз

Кудо для перерахування команд. Ось як я також створив віддалені сховища.
Дейв Бахер

5
Додам, що якщо ви хочете, щоб інші люди співпрацювали з вами на цьому репо, вам слід додати --sharedдо кінця git --bare initкоманди. Це дозволить встановити необхідні дозволи.
Джош Ліндсі,

Дякую за цю відповідь. Дуже корисно мати подібні речі, які заповнюють відсутні речі в тих, що є дуже хорошими книгами про git, але все ще не охоплюють багато роботи з перетворення з CVS.
восьминоги граббус

21
Мені подобається бігати git push --set-upstream origin masterзамість git push origin masterпершого разу. Це дозволяє мені щоразу вводити git pushабо git pullзамість цього git push origin master. Що б не відповідало вашим уподобанням.
Рік Сміт

8

Ви можете спробувати це:

на сервері:

додавання нової групи до /etc/groupладу (приклад)

mygroup:1001:michael,nir

створити новий сховище 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)

на клієнта:

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

(Дякую Джошу Ліндсі за клієнта)

після клієнта, виконайте на сервері ці команди:

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

Якщо ви отримали цю помилку після 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>

спробуйте:

git push -u origin master

Це допоможе.


5

Ви повинні додати принаймні один файл в сховище , перш ніж здійснювати, наприклад .gitignore.


Я здогадуюсь, як я намагаюся його використовувати - це додати файли спочатку від свого клієнта, оскільки саме там я пишу код. Це концептуально не місце в git? Чи потрібно спочатку взяти на себе зобов'язання щодо клієнта, а потім натиснути на сервер?
Дональд Х'юз

5

Якщо у вашому проекті немає гілки вище за потоком, тобто якщо це найперше, коли віддалений сховище дізнається про гілку, створену у вашому локальному сховищі, повинна працювати наступна команда.

git push --set-upstream origin <branch-name>

3

@Josh Lindsey вже відповів чудово. Але я хочу додати трохи інформації, оскільки часто використовую ssh.

Тому просто змініть:

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

до:

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

Зауважте, що двокрапка між доменом і контуром вже не існує.


1

Вам потрібно налаштувати віддалене сховище для свого клієнта:

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

Я запустив цю команду, але "майстер походження git push" все ще призводить до "не вдалося натиснути кілька реф." Я спробував зробити "майстра походження git pull origin" і отримав "не вдалося знайти віддаленого майстра ref".
Дональд Х'юз

Я не впевнений, чи має це значення, але мої віддалені сховища створені так, git --bare initяк рекомендує @Josh Lindsey.
Дейв Бахер

у мене був той самий випуск: "не вдалося натиснути кілька реф." ... намагаючись підштовхнути головну гілку від репо до однієї, яку я створив ... тоді я помітив, що джерело не має головного відділення - переконайтеся, що галузь ви намагаєтеся натиснути існує :)
Дата Geek
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.