Cara menambahkan repo lokal dan memperlakukannya sebagai repo jarak jauh

234

Saya mencoba membuat tindakan repo lokal sebagai remote dengan nama bakuntuk repo lokal lain di PC saya, menggunakan yang berikut ini:

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

yang memberikan kesalahan ini:

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

Saya mencoba menyinkronkan dua repo lokal, dengan satu dikonfigurasi sebagai remote yang dinamai bakuntuk yang lain, dan kemudian mengeluarkan git pull bak.

Apa cara terbaik untuk melakukannya?


Edit:

Maaf, konyol saya, saya baru menyadari bahwa add remote seharusnya:

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

nama kendali jarak jauh berjalan di depan alamat.

opensas
sumber

Jawaban:

273

Argumen Anda remote addterbalik dengan perintah:

git remote add <NAME> <PATH>

Begitu:

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

Lihat git remote --helpuntuk informasi lebih lanjut.

larsks
sumber
6
Apakah .gitpada akhirnya diperlukan secara khusus?
Erik Aigner
5
Itu hanya jalan ... Git tidak peduli apa namanya.
larsks
2
@ErikAigner secara tradisional, repo kosong akan berakhir dengan akhiran ".git". Meskipun biasanya tidak seperti direktori sendiri, melainkan sebagai: "/path/to/projectname.git". - Selain itu tidak ada bedanya.
Atli
7
Tampaknya Anda perlu menggunakan jalur absolut, yang tidak jelas bagi saya. Ketika saya mencoba dengan jalur relatif, saya dapat fatal: '../dir' does not appear to be a git repository.
Keith Layne
1
Sangat penting untuk meletakkan file://di depan path dan menggunakan path lengkap ke repositori lokal sehingga perangkat lunak klien dapat mengaksesnya melalui protokol yang diharapkan. Dan dalam menjawab pertanyaan Erik di atas, jalan .gitdi ujung jalan tampaknya dibutuhkan.
Scott Lahteine
158

Jika tujuan Anda adalah menyimpan salinan lokal repositori agar mudah dicadangkan atau menempel pada drive eksternal atau berbagi melalui penyimpanan cloud (Dropbox, dll.) Anda mungkin ingin menggunakan repositori kosong . Ini memungkinkan Anda untuk membuat salinan repositori tanpa direktori yang berfungsi, dioptimalkan untuk dibagikan.

Sebagai contoh:

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

Anda juga dapat mengkloning seolah ini repo jarak jauh:

$ git clone ~/repos/myproject.git
Matt Sanders
sumber
9
Ini harus menjadi jawaban yang diterima, karena sangat cocok dengan pertanyaan "Apa cara terbaik untuk itu?". "Repo lokal diperlakukan sebagai repo jarak jauh", demikian sebutan @opensas, memang direktori kosong (seperti repositori jarak jauh nyata)
Jack '
1
Saya sarankan edit: Apakah Anda harus menggunakan "git remot add .." + "git push" atau hanya "git clone" ditunjukkan di sini: stackoverflow.com/a/31590993/5446285 (jawaban adelphus)
Jack '
1
@ Jack - dapatkah Anda menguraikan apa yang menurut Anda membingungkan? Saya senang untuk mengubah tetapi ingin menjaga jawabannya relatif singkat.
Matt Sanders
6

Tampaknya format Anda salah:

Jika Anda ingin membagikan repositori yang dibuat secara lokal, atau Anda ingin mengambil kontribusi dari repositori orang lain - jika Anda ingin berinteraksi dengan repositori baru dengan cara apa pun, umumnya lebih mudah untuk menambahkannya sebagai remote. Anda melakukannya dengan menjalankan git remote add [alias] [url]. Itu menambahkan [url] di bawah remote lokal bernama [alias].

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

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

Kristian
sumber
0

Saya memposting jawaban ini untuk memberikan skrip dengan penjelasan yang mencakup tiga skenario berbeda untuk membuat repo lokal yang memiliki remote lokal. Anda dapat menjalankan seluruh skrip dan itu akan membuat repo uji di folder rumah Anda (diuji pada windows git bash). Penjelasannya ada di dalam skrip untuk lebih mudah menyimpan ke catatan pribadi Anda, sangat mudah dibaca, misalnya Visual Studio Code.

Saya juga ingin mengucapkan terima kasih kepada Jack karena mengaitkan dengan jawaban ini di mana adelphus memiliki penjelasan yang baik, terperinci, langsung tentang topik tersebut.

Ini adalah posting pertama saya di sini, jadi tolong beri tahu apa yang harus diperbaiki.

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