Come aggiungere un repository locale e trattarlo come un repository remoto


234

Sto cercando di fare in modo che un repository locale funga da telecomando con il nome bakdi un altro repository locale sul mio PC, utilizzando quanto segue:

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

che dà questo errore:

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

Sto provando a sincronizzare due repository locali, con uno configurato come telecomando chiamato bakper l'altro, e quindi emettendo git pull bak.

Qual'è il miglior modo di farlo?


Modificare:

Scusa, sciocco, mi sono appena reso conto che l'aggiunta remota dovrebbe essere:

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

il nome del telecomando precede l'indirizzo.

Risposte:


273

Hai i tuoi argomenti al remote addcomando invertiti:

git remote add <NAME> <PATH>

Così:

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

Vedi git remote --helpper maggiori informazioni.


6
È il .gitfine specifico richiesto però?
Erik Aigner,

5
È solo un percorso ... A Git non importa come si chiama.
Larks

2
@ErikAigner tradizionalmente, i repository nudi terminano con un suffisso ".git". Sebbene di solito non sia come una propria directory, ma piuttosto come: "/path/to/projectname.git". - A parte questo, fa poca differenza.
Atli,

7
Sembra che tu debba usare un percorso assoluto, che non era ovvio per me. Quando ho provato con un percorso relativo, ho ottenuto fatal: '../dir' does not appear to be a git repository.
Keith Layne,

1
È importante mettere file://in primo piano il percorso e utilizzare il percorso completo al repository locale in modo che il software client possa accedervi attraverso il protocollo previsto. E in risposta alla domanda di Erik sopra, .gitapparentemente è necessaria la fine del percorso.
Scott Lahteine,

158

Se il tuo obiettivo è conservare una copia locale del repository per un facile backup o per attaccare su un disco esterno o condividere tramite cloud storage (Dropbox, ecc.) Potresti voler usare un repository nudo . Ciò consente di creare una copia del repository senza una directory di lavoro, ottimizzata per la condivisione.

Per esempio:

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

Allo stesso modo è possibile clonare come se si trattasse di un repository remoto:

$ git clone ~/repos/myproject.git

9
Questa dovrebbe essere la risposta accettata, perché si adatta perfettamente alla domanda "Qual è il modo migliore per farlo?". Il "repository locale trattato come un repository remoto", come lo chiamava @opensas, è in effetti una directory vuota (proprio come un vero repository remoto)
Jack

1
Suggerisco una modifica: se si deve usare "git add remot .." + "push git" o semplicemente "clone git" è indicato qui: stackoverflow.com/a/31590993/5446285 (Adelphus' risposta)
Jack'

1
@Jack - puoi approfondire ciò che hai trovato confuso? Sono felice di modificare ma voglio mantenere la risposta relativamente concisa.
Matt Sanders,

6

Sembra che il tuo formato non sia corretto:

Se si desidera condividere un repository creato localmente o si desidera ricevere contributi da un repository di qualcun altro - se si desidera interagire in qualche modo con un nuovo repository, è generalmente più semplice aggiungerlo come telecomando. A tale scopo, esegui git remote add [alias] [url]. Ciò aggiunge [url] sotto un telecomando locale chiamato [alias].

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

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


0

Sto pubblicando questa risposta per fornire uno script con spiegazioni che coprano tre diversi scenari di creazione di un repository locale con un telecomando locale. Puoi eseguire l'intero script e creerà i repository di prova nella tua cartella home (testato su Windows Git Bash). Le spiegazioni sono all'interno dello script per facilitare il salvataggio delle note personali, è molto leggibile, ad esempio il codice di Visual Studio.

Vorrei anche ringraziare Jack per il collegamento a questa risposta in cui Adelphus ha buone e dettagliate spiegazioni pratiche sull'argomento.

Questo è il mio primo post qui, quindi per favore avvisate cosa dovrebbe essere migliorato.

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

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.