So fügen Sie ein lokales Repo hinzu und behandeln es als Remote-Repo

234

Ich versuche, ein lokales Repo als Fernbedienung mit dem Namen eines bakanderen lokalen Repos auf meinem PC zu verwenden, indem ich Folgendes verwende:

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

was diesen Fehler gibt:

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

Ich versuche, zwei lokale Repos zu synchronisieren, wobei eines als Remote bakfür das andere konfiguriert ist , und dann auszugeben git pull bak.

Was ist der beste Weg, um es zu tun?


Bearbeiten:

Tut mir leid, ich habe gerade festgestellt, dass das Remote-Add sein sollte:

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

Der Name der Fernbedienung steht vor der Adresse.

opensas
quelle

Antworten:

273

Sie haben Ihre Argumente für den remote addBefehl umgekehrt:

git remote add <NAME> <PATH>

So:

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

Siehe git remote --helpfür weitere Informationen.

Larsks
quelle
6
Ist das .gitam Ende aber speziell erforderlich?
Erik Aigner
5
Es ist nur ein Pfad ... Git ist es egal, wie er heißt.
Larsks
2
@ErikAigner Traditionell enden nackte Repos mit dem Suffix ".git". Obwohl normalerweise nicht als eigenes Verzeichnis, sondern als: "/path/to/projectname.git". - Davon abgesehen macht es wenig Unterschied.
Atli
7
Es scheint, dass Sie einen absoluten Pfad verwenden müssen, der mir nicht klar war. Als ich es mit einem relativen Pfad versuchte, bekam ich fatal: '../dir' does not appear to be a git repository.
Keith Layne
1
Es ist wichtig, file://den Pfad an die Vorderseite zu setzen und den vollständigen Pfad zum lokalen Repository zu verwenden, damit die Client-Software über das erwartete Protokoll darauf zugreifen kann. Und als Antwort auf Eriks obige Frage .gitwird anscheinend das am Ende des Pfades benötigt.
Scott Lahteine
157

Wenn Sie eine lokale Kopie des Repositorys für eine einfache Sicherung oder zum Aufkleben auf ein externes Laufwerk oder zur Freigabe über einen Cloud-Speicher (Dropbox usw.) aufbewahren möchten, möchten Sie möglicherweise ein nacktes Repository verwenden . Auf diese Weise können Sie eine Kopie des Repositorys ohne Arbeitsverzeichnis erstellen, das für die Freigabe optimiert ist.

Beispielsweise:

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

Ebenso können Sie klonen, als wäre dies ein Remote-Repo:

$ git clone ~/repos/myproject.git
Matt Sanders
quelle
9
Dies sollte die akzeptierte Antwort sein, da sie perfekt zur Frage "Was ist der beste Weg?" Passt. Das "lokale Repo, das als Remote-Repo behandelt wird", wie @opensas es nannte, ist in der Tat ein nacktes Verzeichnis (genau wie ein echtes Remote-Repository)
Jack
1
Ich schlage eine Bearbeitung vor: Ob Sie "git remot add .." + "git push" oder nur "git clone" verwenden sollten, wird hier angegeben: stackoverflow.com/a/31590993/5446285 (adelphus 'Antwort)
Jack
1
@ Jack - kannst du näher auf das eingehen, was du verwirrend fandest? Ich ändere gerne, möchte aber die Antwort relativ kurz halten.
Matt Sanders
6

Es scheint, dass Ihr Format falsch ist:

Wenn Sie ein lokal erstelltes Repository freigeben oder Beiträge von einem anderen Repository übernehmen möchten, ist es im Allgemeinen am einfachsten, es als Remote hinzuzufügen, wenn Sie in irgendeiner Weise mit einem neuen Repository interagieren möchten. Sie tun dies, indem Sie git remote add [alias] [url] ausführen. Dadurch wird [url] unter einer lokalen Fernbedienung mit dem Namen [alias] hinzugefügt.

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

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

Kristian
quelle
0

Ich poste diese Antwort, um ein Skript mit Erklärungen bereitzustellen, das drei verschiedene Szenarien zum Erstellen eines lokalen Repos mit einer lokalen Fernbedienung abdeckt. Sie können das gesamte Skript ausführen und es erstellt die Test-Repos in Ihrem Home-Ordner (getestet unter Windows Git Bash). Die Erklärungen befinden sich im Skript, um das Speichern in Ihren persönlichen Notizen zu vereinfachen. Sie sind beispielsweise in Visual Studio Code gut lesbar.

Ich möchte Jack auch dafür danken, dass er auf diese Antwort verlinkt hat, in der Adelphus gute, detaillierte und praktische Erklärungen zu diesem Thema hat.

Dies ist mein erster Beitrag hier. Bitte geben Sie an, was verbessert werden sollte.

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