วิธีเพิ่ม repo ในพื้นที่และจัดการเป็น repo ระยะไกล


234

ฉันกำลังพยายามทำ repo ในพื้นที่ให้เป็นรีโมตโดยใช้ชื่อbakRepo ในเครื่องอื่นบนพีซีของฉันโดยใช้สิ่งต่อไปนี้:

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

ฉันพยายามที่จะซิงค์สอง Repos ท้องถิ่นกับการกำหนดค่าเป็นชื่อที่ห่างไกล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ที่สิ้นสุดจำเป็นโดยเฉพาะว่า?
Erik Aigner

5
มันเป็นแค่เส้นทาง ... Git ไม่สนใจว่าชื่ออะไร
larsks

2
@ErikAigner เดิม repos เปลือยจะลงท้ายด้วยคำต่อท้าย ".git" แม้ว่าโดยทั่วไปแล้วจะไม่ใช่ไดเรกทอรีของตัวเอง แต่เป็น: "/path/to/projectname.git" - นอกเหนือจากนั้นมันสร้างความแตกต่างเล็กน้อย
Atli

7
ดูเหมือนว่าคุณต้องใช้เส้นทางสัมบูรณ์ซึ่งไม่ชัดเจนสำหรับฉัน fatal: '../dir' does not appear to be a git repositoryเมื่อฉันพยายามกับทางญาติผมได้
Keith Layne

1
สิ่งสำคัญคือต้องวางไว้file://ด้านหน้าของพา ธ และใช้พา ธ แบบเต็มไปยังที่เก็บโลคัลเพื่อให้ไคลเอ็นต์ซอฟต์แวร์สามารถเข้าถึงได้ผ่านโปรโตคอลที่คาดหวัง และเพื่อตอบคำถามของ Erik ข้างต้น.gitจำเป็นต้องมีจุดสิ้นสุดของเส้นทาง
Scott Lahteine

158

ถ้าเป้าหมายของคุณคือการเก็บสำเนาของพื้นที่เก็บข้อมูลสำหรับการสำรองข้อมูลได้ง่ายหรือสำหรับติดลงบนไดรฟ์ภายนอกหรือแบ่งปันผ่านการจัดเก็บเมฆ (Dropbox ฯลฯ ) คุณอาจต้องการที่จะใช้พื้นที่เก็บข้อมูลเปลือย สิ่งนี้อนุญาตให้คุณสร้างสำเนาของที่เก็บโดยไม่มีไดเร็กทอรีที่ใช้งานได้ซึ่งเหมาะสำหรับการแชร์

ตัวอย่างเช่น:

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

ในทำนองเดียวกันคุณสามารถโคลนราวกับว่านี่เป็น repo ระยะไกล:

$ git clone ~/repos/myproject.git

9
นี่ควรเป็นคำตอบที่ได้รับการยอมรับเพราะมันลงตัวกับคำถามที่ว่า "repo ท้องถิ่นถือว่าเป็น repo ระยะไกล" ตามที่ @ opensas เรียกว่ามันแน่นอนไดเรกทอรีเปลือย (เช่นเดียวกับพื้นที่เก็บข้อมูลระยะไกลที่แท้จริง)
Jack '

1
ฉันแนะนำการแก้ไข: ไม่ว่าคุณควรใช้ "git remot add .. " + "git push" หรือเพียงแค่ "git clone" ระบุไว้ที่นี่: stackoverflow.com/a/31590993/5446285 (คำตอบของ adelphus)
Jack '

1
@ แจ็ค - คุณสามารถอธิบายรายละเอียดเกี่ยวกับสิ่งที่คุณสับสนได้หรือไม่? ฉันยินดีที่จะแก้ไข แต่ต้องการให้คำตอบสั้นกระชับ
Matt Sanders

6

ดูเหมือนว่ารูปแบบของคุณไม่ถูกต้อง:

หากคุณต้องการแชร์ที่เก็บข้อมูลที่สร้างขึ้นในเครื่องหรือคุณต้องการรับการสนับสนุนจากที่เก็บของคนอื่น - ถ้าคุณต้องการโต้ตอบกับที่เก็บข้อมูลใหม่ไม่ว่าทางใดทางหนึ่ง คุณทำได้โดยการเรียกใช้ git remote เพิ่ม [alias] [url] ที่เพิ่ม [url] ภายใต้รีโมตท้องถิ่นชื่อ [alias]

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

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


0

ฉันกำลังโพสต์คำตอบนี้เพื่อให้คำอธิบายสคริปต์ที่ครอบคลุมสามสถานการณ์ที่แตกต่างกันในการสร้าง repo ในพื้นที่ที่มี Remote Local คุณสามารถเรียกใช้สคริปต์ทั้งหมดและมันจะสร้าง repos ทดสอบในโฟลเดอร์บ้านของคุณ (ทดสอบบน windows git bash) คำอธิบายอยู่ในสคริปต์เพื่อให้ง่ายต่อการบันทึกในบันทึกย่อส่วนบุคคลของคุณสามารถอ่านได้ง่ายเช่น Visual Studio Code

ฉันขอขอบคุณแจ็คที่เชื่อมโยงกับคำตอบนี้ซึ่ง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
}

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.