Jak dodać lokalne repozytorium i traktować je jako repozytorium zdalne

234

Staram się, aby lokalne repozytorium działało jako zdalne z nazwą bakinnego lokalnego repozytorium na moim komputerze, używając następujących poleceń:

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

co daje ten błąd:

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

Próbuję zsynchronizować dwa lokalne repozytoria, z których jedno jest skonfigurowane jako zdalne nazwane bakdla drugiego, a następnie wydaje git pull bak.

Jak najlepiej to zrobić?


Edytować:

Przepraszam, głupio ja, właśnie zdałem sobie sprawę, że zdalne dodawanie powinno być:

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

nazwa pilota występuje przed adresem.

opensas
źródło

Odpowiedzi:

273

Masz remote addodwrócone argumenty do polecenia:

git remote add <NAME> <PATH>

Więc:

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

Zobacz git remote --helppo więcej informacji.

Larsks
źródło
6
Czy jednak .gitkoniec jest konkretnie wymagany?
Erik Aigner,
5
To tylko ścieżka ... Git nie obchodzi, jak się nazywa.
larsks
2
@ErikAigner tradycyjnie, same repozytoria kończą się przyrostkiem „.git”. Chociaż zwykle nie jest to własny katalog, ale raczej: „/path/to/projectname.git”. - Poza tym nie ma to większego znaczenia.
Atli
7
Wygląda na to, że musisz użyć absolutnej ścieżki, co nie było dla mnie oczywiste. Kiedy próbowałem z względną ścieżką, dostałem fatal: '../dir' does not appear to be a git repository.
Keith Layne
1
Ważne jest, aby umieścić file://na początku ścieżki i użyć pełnej ścieżki do lokalnego repozytorium, aby oprogramowanie klienckie mogło uzyskać do niego dostęp za pośrednictwem oczekiwanego protokołu. W odpowiedzi na powyższe pytanie Erika .gitnajwyraźniej potrzebny jest koniec ścieżki.
Scott Lahteine
158

Jeśli Twoim celem jest zachowanie lokalnej kopii repozytorium w celu łatwego tworzenia kopii zapasowych lub przyklejenia do zewnętrznego dysku lub udostępniania za pośrednictwem magazynu w chmurze (Dropbox itp.), Możesz chcieć użyć samego repozytorium . Umożliwia to utworzenie kopii repozytorium bez katalogu roboczego, zoptymalizowanego do udostępniania.

Na przykład:

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

Podobnie możesz sklonować, jakby to było zdalne repozytorium:

$ git clone ~/repos/myproject.git
Matt Sanders
źródło
9
To powinna być zaakceptowana odpowiedź, ponieważ idealnie pasuje do pytania „Jaki jest najlepszy sposób?”. „Lokalne repozytorium traktowane jako repozytorium zdalne”, jak to nazywał @opensas, jest rzeczywiście pustym katalogiem (tak jak prawdziwe repozytorium zdalne)
Jack
1
Sugeruję edycję: czy należy użyć „git remot add ..” + „git push” czy po prostu „git clone” jest wskazane tutaj: stackoverflow.com/a/31590993/5446285 (odpowiedź Adelphusa)
Jack
1
@Jack - czy możesz wyjaśnić, co uważasz za mylące? Cieszę się, że mogę to zmienić, ale chcę, aby odpowiedź była zwięzła.
Matt Sanders,
6

Wygląda na to, że twój format jest niepoprawny:

Jeśli chcesz udostępnić lokalnie utworzone repozytorium lub chcesz wziąć wkład od innego repozytorium - jeśli chcesz w jakikolwiek sposób współdziałać z nowym repozytorium, zazwyczaj najłatwiej jest dodać je jako zdalne. Robisz to, uruchamiając git remote add [alias] [url]. To dodaje [url] pod lokalnym pilotem o nazwie [alias].

#example
$ git remote
$ git remote add github [email protected]:schacon/hw.git
$ git remote -v

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

Kristian
źródło
0

Publikuję tę odpowiedź, aby dostarczyć skrypt z objaśnieniami obejmującymi trzy różne scenariusze tworzenia lokalnego repozytorium z lokalnym pilotem. Możesz uruchomić cały skrypt, który utworzy repozytorium testowe w twoim katalogu domowym (testowane na Windows Git Bash). Wyjaśnienia znajdują się w skrypcie, aby ułatwić zapisywanie osobistych notatek, jest on bardzo czytelny np. Z Visual Studio Code.

Chciałbym również podziękować Jackowi za link do tej odpowiedzi, w której Adelphus ma dobre, szczegółowe i praktyczne wyjaśnienia na ten temat.

To jest mój pierwszy post tutaj, więc proszę doradzić, co należy poprawić.

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

Jarek
źródło