Làm thế nào để thêm một repo cục bộ và coi nó như một repo từ xa


234

Tôi đang cố gắng tạo một repo cục bộ hoạt động như một điều khiển từ xa với tên bakcho một repo cục bộ khác trên PC của tôi, sử dụng như sau:

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

đưa ra lỗi này:

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

Tôi đang cố gắng đồng bộ hóa hai repos cục bộ, với một cái được cấu hình như một cái điều khiển từ xa được đặt tên bakcho cái kia, rồi phát hành git pull bak.

Cách tốt nhất để làm điều đó là gì?


Biên tập:

Xin lỗi, ngớ ngẩn với tôi, tôi vừa nhận ra add add từ xa nên là:

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

Tên của điều khiển từ xa đi trước địa chỉ.

Câu trả lời:


273

Bạn có các đối số của bạn để remote addlệnh đảo ngược:

git remote add <NAME> <PATH>

Vì thế:

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

Xem git remote --helpđể biết thêm thông tin.


6
.gitcuối cùng đặc biệt yêu cầu mặc dù?
Erik Aigner

5
Đó chỉ là một con đường ... Git không quan tâm nó được đặt tên là gì.
larsks

2
@ErikAigner theo truyền thống, repos trần sẽ kết thúc bằng hậu tố ".git". Mặc dù thường không phải là thư mục riêng của nó, mà là: "/path/to/projectname.git". - Khác hơn là nó làm cho ít sự khác biệt.
Atli

7
Dường như bạn cần sử dụng một đường dẫn tuyệt đối, điều này không rõ ràng đối với tôi. Khi tôi cố gắng với một con đường tương đối, tôi đã nhận được fatal: '../dir' does not appear to be a git repository.
Keith Layne

1
Điều quan trọng là đặt file://ở phía trước của đường dẫn và sử dụng đường dẫn đầy đủ đến kho lưu trữ cục bộ để phần mềm máy khách có thể truy cập thông qua giao thức dự kiến. Và để trả lời câu hỏi của Erik ở trên, .gitphần cuối của con đường rõ ràng là cần thiết.
Scott Lahteine

158

Nếu mục tiêu của bạn là giữ một bản sao cục bộ của kho lưu trữ để dễ dàng sao lưu hoặc gắn vào ổ đĩa ngoài hoặc chia sẻ qua lưu trữ đám mây (Dropbox, v.v.), bạn có thể muốn sử dụng kho lưu trữ trống . Điều này cho phép bạn tạo một bản sao của kho lưu trữ mà không cần thư mục làm việc, được tối ưu hóa để chia sẻ.

Ví dụ:

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

Tương tự, bạn có thể sao chép như thể đây là một repo từ xa:

$ git clone ~/repos/myproject.git

9
Đây phải là câu trả lời được chấp nhận, bởi vì nó hoàn toàn phù hợp với câu hỏi "Cách tốt nhất cho nó là gì?". "Repo cục bộ được coi là repo từ xa", như @opensas gọi nó, thực sự là một thư mục trống (giống như một kho lưu trữ từ xa thực sự)
Jack

1
Tôi đề nghị chỉnh sửa: Cho dù bạn nên sử dụng "git remot add .." + "git đẩy" hoặc chỉ "git clone" được chỉ định ở đây: stackoverflow.com/a/31590993/5446285 (câu trả lời của adelphus)
Jack '

1
@Jack - bạn có thể giải thích những gì bạn thấy khó hiểu không? Tôi rất vui khi sửa đổi nhưng muốn giữ câu trả lời tương đối ngắn gọn.
Matt Sanders

6

Có vẻ như định dạng của bạn không chính xác:

Nếu bạn muốn chia sẻ một kho lưu trữ được tạo cục bộ hoặc bạn muốn đóng góp từ kho lưu trữ của ai đó - nếu bạn muốn tương tác theo bất kỳ cách nào với một kho lưu trữ mới, nói chung, dễ dàng nhất để thêm nó dưới dạng từ xa. Bạn làm điều đó bằng cách chạy git remote add [bí danh] [url]. Điều đó thêm [url] dưới một điều khiển từ xa cục bộ có tên [bí danh].

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

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


0

Tôi đang đăng câu trả lời này để cung cấp một kịch bản với các giải thích bao gồm ba kịch bản khác nhau về việc tạo một repo cục bộ có một điều khiển từ xa cục bộ. Bạn có thể chạy toàn bộ tập lệnh và nó sẽ tạo ra các repos thử nghiệm trong thư mục nhà của bạn (được thử nghiệm trên windows git bash). Các giải thích nằm trong tập lệnh để lưu dễ dàng hơn vào ghi chú cá nhân của bạn, rất dễ đọc, ví dụ như Visual Studio Code.

Tôi cũng muốn cảm ơn Jack vì đã liên kết với câu trả lời này , nơi adelphus có những giải thích tốt, chi tiết, về những giải thích về chủ đề này.

Đây là bài viết đầu tiên của tôi ở đây vì vậy xin vui lòng tư vấn những gì cần được cải thiện.

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

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.