Git push / clone на новый сервер

127

Я только изучаю Git и кое-что не могу решить. Могу ли я отправить копию на другой сервер в другом месте после создания и использования репозитория git локально на моем Mac? Я нахожусь за брандмауэром, поэтому, к сожалению, я не могу работать git cloneс другой машины.

Иаков
источник

Ответы:

137
  1. git remote add имя URL
  2. git push название ветви

Пример:

git remote add origin git@github.com:foo/bar.git
git push origin master

См. Документацию git push- вы можете установить пульт в качестве пульта дистанционного управления по умолчанию для данной ветки; если нет, имя originособенное. Просто git pushодни будут делать то же самое , как git push origin thisbranch (для любой ветви вы находитесь).

Hobbs
источник
7
Для более точного эффекта, такого как «push cloning», а не просто pushin a _branch_ : git push -u --allмы можем опустить, так originкак это предполагаемое имя по умолчанию для push, а -uтакже будет отслеживать удаленные ветки.
cregox 02
13
Этого должно быть достаточно, чтобы создать пустой пустой репозиторий на сервере, используя, git init --bare /foo/bar.gitа затем вставить туда свой локальный (как в этом ответе). Вам не нужно ничего переносить с zip / tared на сервер.
OderWat
1
Второй OderWat. Например, выполните команду «git init --bare foo / bar.git» при входе в систему удаленного доступа (например, git@github.com), тогда «удаленный источник» будет иметь место назначения для отправки. Для примера с github, я думаю, вы могли бы использовать веб-интерфейс Github Repository / Add, а затем следовать совету «Вытолкнуть существующий репозиторий из командной строки», который он дает. Github советует использовать '-u' для отслеживания ссылки.
Дэйв Икс
Этот метод может быть каноническим, но он тупой и делает git менее удобным. Я люблю себя немного мерзавцем, но боже мой, у него есть проблемы с пользовательским интерфейсом ..
Росс Роджерс
Я взял на себя смелость удалить параграф «ИЗМЕНИТЬ», который был добавлен к исходному вопросу, из-за чего казалось, что эта процедура сомнительна. Я не думаю, что это так, и в любом случае это должен был быть комментарий, а не редактирование вопроса.
Август Лиллеа,
75

Что вы можете сделать, это сначала на вашем локальном компьютере создать чистый клон репозитория.

git clone --bare /path/to/repo /path/to/bare/repo.git  # don't forget the .git!

Теперь заархивируйте новый каталог repo.git с помощью tar / gzip или любого другого инструмента архивации, а затем скопируйте архив на сервер.

Разархивируйте репо на своем сервере. Затем вам нужно будет настроить пульт в локальном репозитории:

git remote add repo-name user@host:/path/to/repo.git #this assumes you're using SSH

Затем вы сможете нажимать и извлекать из удаленного репо с помощью:

git push repo-name branch-name
git pull repo-name branch-name
Грант Лимберг
источник
4
Не могли бы вы объяснить комментарий «не забывайте .git!»? Где смысл добавлять .git в конец папки? Когда мне это делать? Только конвенция?
lumbric
5
«.Git» - это просто неофициальный стандарт для определения чистого репозитория git
Грант Лимберг
3
Я не следую этой идее ... разве это не нарушает всю цель настройки сервера git и фактического использования его для «передачи / копирования / сохранения данных в синхронизации / резервном копировании», а не заархивирования и использования другого метода?
cregox 02
1
Это именно то, что мне было нужно, потому что исходное репо находилось в сети, у которой не было доступа к сети, где существовал сервер, на который я хотел нажать. Это позволило мне поместить репо в ящик, у которого был доступ.
michaeltwofish
3
@Cawas вам нужно только один раз вручную заархивировать / скопировать / извлечь репо. после этого все, что вам нужно, это git push and pull.
Sparebytes
9

Есть много способов перемещать репозитории, git bundleэто хороший способ, если у вас недостаточная доступность сети. Поскольку репозиторий Git на самом деле представляет собой просто каталог, полный файлов, вы можете «клонировать» репозиторий, сделав копию .gitкаталога любым удобным для вас способом.

Самый эффективный способ - использовать где-нибудь внешний репозиторий (использовать GitHub или настроить Gitosis ), а затем git push.

Грег Хьюгилл
источник
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
источник
Мне нравится простота вашего ответа, но я не уверен, нужно это мне или нет. У меня есть репозиторий GIT на GitHub, и теперь я хочу отправить в живые файлы наш сервер Ubuntu (на котором установлен GIT). Можете ли вы добавить несколько комментариев, чтобы прояснить процесс?
Дэйв Эверитт
1

Вы можете отправить ветку на удаленный сервер, скажем, на github . Сначала вам нужно будет выполнить первоначальную настройку проекта, затем клонировать свой проект и:

git push <remote repo> <your branch>
Cesar
источник