Як додати локальне репо і трактувати його як віддалене репо


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 надбудову ..» + «мерзотник поштовх» або просто «мерзотник клон» вказується тут: stackoverflow.com/a/31590993/5446285 (Адельфи Мецськім відповідь)
Джек »

1
@Jack - чи можете ви детальніше розповісти про те, що вас заплутало? Я радий внести зміни, але хочу, щоб відповідь була досить короткою.
Метт Сандерс

6

Схоже, ваш формат неправильний:

Якщо ви хочете поділитися сховищем, створеним на місцевому рівні, або ви хочете взяти внесок із сховища когось іншого elses - якщо ви хочете будь-яким чином взаємодіяти з новим сховищем, його, як правило, найпростіше додати як віддалений. Ви робите це, запускаючи git remote add [alias] [url]. Це додає [URL] під локальним віддаленим назвою [псевдонім].

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