Как добавить локальное репо и рассматривать его как удаленное репо


234

Я пытаюсь заставить локальное репо действовать как удаленный с именем bakдругого локального репо на моем ПК, используя следующее:

git remote add /home/sas/dev/apps/smx/repo/bak/ontologybackend/.git bak

который дает эту ошибку:

fatal: '/home/sas/dev/apps/smx/repo/bak/ontologybackend/.git' is not a valid remote name

Я пытаюсь синхронизировать два локальных репозитория, один из которых настроен как удаленный с именем bakдругого, а затем выдан git pull bak.

Каков наилучший способ сделать это?


Редактировать:

Извините, глупый я, я только что понял, что удаленное добавление должно быть:

git remote add bak /home/sas/dev/apps/smx/repo/bak/ontologybackend/.git

имя пульта идет перед адресом.

Ответы:


273

У вас есть аргументы для remote addкоманды:

git remote add <NAME> <PATH>

Так:

git remote add bak /home/sas/dev/apps/smx/repo/bak/ontologybackend/.git

Смотрите git remote --helpдля получения дополнительной информации.


6
.gitТребуется ли в конце конкретно, хотя?
Эрик Эйгнер

5
Это просто путь ... Git не волнует, как он называется.
Жаворонки

2
@ErikAigner традиционно, голые репозитории заканчиваются суффиксом ".git". Хотя обычно не как собственный каталог, а как: /path/to/projectname.git. - Кроме этого, это не имеет большого значения.
Атли

7
Похоже, вам нужно использовать абсолютный путь, который не был очевиден для меня. Когда я попробовал с относительным путем, я получил fatal: '../dir' does not appear to be a git repository.
Кит Лэйн

1
Важно указать file://путь вперед и использовать полный путь к локальному репозиторию, чтобы клиентское программное обеспечение могло получить к нему доступ через ожидаемый протокол. И в ответ на вопрос Эрика выше, .gitконец пути явно необходим.
Скотт Лахтейн

158

Если ваша цель - сохранить локальную копию репозитория для простого резервного копирования или для размещения на внешнем диске или для совместного использования через облачное хранилище (Dropbox и т. Д.), Вы можете использовать пустой репозиторий . Это позволяет создать копию хранилища без рабочего каталога, оптимизированного для совместного использования.

Например:

$ git init --bare ~/repos/myproject.git
$ cd /path/to/existing/repo
$ git remote add origin ~/repos/myproject.git
$ git push origin master

Точно так же вы можете клонировать, как если бы это был удаленный репозиторий:

$ git clone ~/repos/myproject.git

9
Это должен быть принятый ответ, потому что он идеально подходит к вопросу «Как лучше?». «Локальное репо, рассматриваемое как удаленное репо», как называл его @opensas, действительно является пустым каталогом (как настоящий удаленный репозиторий)
Джек

1
Я предлагаю правку: следует ли вам использовать «git remot add ..» + «git push» или просто «git clone»: здесь указано: stackoverflow.com/a/31590993/5446285 (ответ adelphus)
Джек,

1
@ Джек - не могли бы вы рассказать, что вас смущает? Я рад внести изменения, но хочу сохранить ответ относительно кратким.
Мэтт Сандерс

6

Похоже, что ваш формат неверен:

Если вы хотите предоставить общий доступ к локально созданному репозиторию или вы хотите получать вклады от кого-то еще, репозиторий - если вы хотите каким-либо образом взаимодействовать с новым репозиторием, как правило, проще всего добавить его в качестве удаленного. Это можно сделать, запустив git remote add [alias] [url]. Это добавляет [url] под локальный пульт с именем [alias].

#example
$ git remote
$ git remote add github git@github.com:schacon/hw.git
$ git remote -v

http://gitref.org/remotes/#remote


0

Я публикую этот ответ, чтобы предоставить сценарий с объяснениями, который охватывает три различных сценария создания локального репо с локальным удаленным устройством. Вы можете запустить весь скрипт, и он создаст тестовые репозитории в вашей домашней папке (протестировано на Windows Git Bash). Объяснения находятся внутри скрипта для более легкого сохранения в ваших личных заметках, его очень легко прочитать, например, из кода Visual Studio.

Я также хотел бы поблагодарить Джека за ссылку на этот ответ, где у adelphus есть хорошие, подробные, практические объяснения по теме.

Это мой первый пост здесь, поэтому, пожалуйста, посоветуйте, что должно быть улучшено.

## SETUP LOCAL GIT REPO WITH A LOCAL REMOTE
# the main elements:
# - remote repo must be initialized with --bare parameter
# - local repo must be initialized
# - local repo must have at least one commit that properly initializes a branch(root of the commit tree)
# - local repo needs to have a remote
# - local repo branch must have an upstream branch on the remote

{ # the brackets are optional, they allow to copy paste into terminal and run entire thing without interruptions, run without them to see which cmd outputs what

cd ~
rm -rf ~/test_git_local_repo/

## Option A - clean slate - you have nothing yet

mkdir -p ~/test_git_local_repo/option_a ; cd ~/test_git_local_repo/option_a
git init --bare local_remote.git # first setup the local remote
git clone local_remote.git local_repo # creates a local repo in dir local_repo
cd ~/test_git_local_repo/option_a/local_repo
git remote -v show origin # see that git clone has configured the tracking
touch README.md ; git add . ; git commit -m "initial commit on master" # properly init master
git push origin master # now have a fully functional setup, -u not needed, git clone does this for you

# check all is set-up correctly
git pull # check you can pull
git branch -avv # see local branches and their respective remote upstream branches with the initial commit
git remote -v show origin # see all branches are set to pull and push to remote
git log --oneline --graph --decorate --all # see all commits and branches tips point to the same commits for both local and remote

## Option B - you already have a local git repo and you want to connect it to a local remote

mkdir -p ~/test_git_local_repo/option_b ; cd ~/test_git_local_repo/option_b
git init --bare local_remote.git # first setup the local remote

# simulate a pre-existing git local repo you want to connect with the local remote
mkdir local_repo ; cd local_repo
git init # if not yet a git repo
touch README.md ; git add . ; git commit -m "initial commit on master" # properly init master
git checkout -b develop ; touch fileB ; git add . ; git commit -m "add fileB on develop" # create develop and fake change

# connect with local remote
cd ~/test_git_local_repo/option_b/local_repo
git remote add origin ~/test_git_local_repo/option_b/local_remote.git
git remote -v show origin # at this point you can see that there is no the tracking configured (unlike with git clone), so you need to push with -u
git push -u origin master # -u to set upstream
git push -u origin develop # -u to set upstream; need to run this for every other branch you already have in the project

# check all is set-up correctly
git pull # check you can pull
git branch -avv # see local branch(es) and its remote upstream with the initial commit
git remote -v show origin # see all remote branches are set to pull and push to remote
git log --oneline --graph --decorate --all # see all commits and branches tips point to the same commits for both local and remote

## Option C - you already have a directory with some files and you want it to be a git repo with a local remote

mkdir -p ~/test_git_local_repo/option_c ; cd ~/test_git_local_repo/option_c
git init --bare local_remote.git # first setup the local remote

# simulate a pre-existing directory with some files
mkdir local_repo ; cd local_repo ; touch README.md fileB

# make a pre-existing directory a git repo and connect it with local remote
cd ~/test_git_local_repo/option_c/local_repo
git init
git add . ; git commit -m "inital commit on master" # properly init master
git remote add origin ~/test_git_local_repo/option_c/local_remote.git
git remote -v show origin # see there is no the tracking configured (unlike with git clone), so you need to push with -u
git push -u origin master # -u to set upstream

# check all is set-up correctly
git pull # check you can pull
git branch -avv # see local branch and its remote upstream with the initial commit
git remote -v show origin # see all remote branches are set to pull and push to remote
git log --oneline --graph --decorate --all # see all commits and branches tips point to the same commits for both local and remote
}

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.