Tôi đang thêm câu trả lời này bởi vì sau khi đến đây (với cùng một câu hỏi), không có câu trả lời nào thực sự mô tả tất cả các bước cần thiết để đi từ không có gì đến một repo từ xa hoàn toàn có thể sử dụng được.
Lưu ý: ví dụ này sử dụng các đường dẫn cục bộ cho vị trí của repo trần, nhưng các giao thức git khác (như SSH được chỉ định bởi OP) sẽ hoạt động tốt.
Tôi đã cố gắng thêm một số ghi chú trên đường cho những người ít quen thuộc với git.
1. Khởi tạo repo trần ...
> git init --bare /path/to/bare/repo.git
Initialised empty Git repository in /path/to/bare/repo.git/
Điều này tạo ra một thư mục (repo.git) và điền nó với các tệp git đại diện cho một repo git. Như nó đứng, repo này là vô dụng - nó không có cam kết và quan trọng hơn, không có chi nhánh . Mặc dù bạn có thể sao chép repo này, bạn không thể lấy từ nó.
Tiếp theo, chúng ta cần tạo một thư mục làm việc. Có một số cách để làm điều này, tùy thuộc vào việc bạn có các tệp hiện có hay không.
2a. Tạo một thư mục làm việc mới (không có tệp hiện có) bằng cách sao chép repo trống
git clone /path/to/bare/repo.git /path/to/work
Cloning into '/path/to/work'...
warning: You appear to have cloned an empty repository.
done.
Lệnh này sẽ chỉ hoạt động nếu /path/to/work
không tồn tại hoặc là một thư mục trống. Hãy lưu ý cảnh báo - ở giai đoạn này, bạn vẫn không có gì hữu ích. Nếu bạn cd /path/to/work
và chạy git status
, bạn sẽ nhận được một cái gì đó như:
On branch master
Initial commit
nothing to commit (create/copy files and use "git add" to track)
nhưng đây là một lời nói dối. Bạn không thực sự ở chi nhánh master
(vì git branch
không trả lại gì) và cho đến nay, không có cam kết nào.
Tiếp theo, sao chép / di chuyển / tạo một số tệp trong thư mục làm việc, thêm chúng vào git và tạo cam kết đầu tiên.
> cd /path/to/work
> echo 123 > afile.txt
> git add .
> git config --local user.name adelphus
> git config --local user.email adelphus@example.com
> git commit -m "added afile"
[master (root-commit) 614ab02] added afile
1 file changed, 1 insertion(+)
create mode 100644 afile.txt
Các git config
lệnh chỉ cần thiết nếu bạn chưa nói với git bạn là ai. Lưu ý rằng nếu bây giờ bạn chạy git branch
, bây giờ bạn sẽ thấy master
chi nhánh được liệt kê. Bây giờ chạy git status
:
On branch master
Your branch is based on 'origin/master', but the upstream is gone.
(use "git branch --unset-upstream" to fixup)
nothing to commit, working directory clean
Điều này cũng gây hiểu lầm - ngược dòng chưa "biến mất", nó chỉ chưa được tạo và git branch --unset-upstream
sẽ không giúp đỡ. Nhưng không sao, bây giờ chúng tôi có cam kết đầu tiên, chúng tôi có thể đẩy và chủ sẽ được tạo trên repo trần.
> git push origin master
Counting objects: 3, done.
Writing objects: 100% (3/3), 207 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To /path/to/bare/repo.git
* [new branch] master -> master
Tại thời điểm này, chúng tôi có một repo trần đầy đủ chức năng có thể được nhân bản ở nơi khác trên nhánh chính cũng như một bản sao làm việc cục bộ có thể kéo và đẩy.
> git pull
Already up-to-date.
> git push origin master
Everything up-to-date
2b. Tạo một thư mục làm việc từ các tệp hiện có
Nếu bạn đã có một thư mục chứa các tệp trong đó (vì vậy bạn không thể sao chép vào nó), bạn có thể khởi tạo một repo git mới, thêm một cam kết đầu tiên và sau đó liên kết nó với repo trần sau đó.
> cd /path/to/work_with_stuff
> git init
Initialised empty Git repository in /path/to/work_with_stuff
> git add .
# add git config stuff if needed
> git commit -m "added stuff"
[master (root-commit) 614ab02] added stuff
20 files changed, 1431 insertions(+)
create mode 100644 stuff.txt
...
Tại thời điểm này, chúng ta có cam kết đầu tiên và một nhánh chính cục bộ mà chúng ta cần biến thành một nhánh ngược dòng được theo dõi từ xa.
> git remote add origin /path/to/bare/repo.git
> git push -u origin master
Counting objects: 31, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (31/31), done.
Writing objects: 100% (31/31), 43.23 KiB | 0 bytes/s, done.
Total 31 (delta 11), reused 0 (delta 0)
To /path/to/bare/repo.git
* [new branch] master -> master
Branch master set up to track remote branch master from origin.
Lưu ý -u
cờ trên git đẩy để đặt nhánh ngược dòng được theo dõi (mới). Cũng như trước đây, bây giờ chúng ta có một repo trần đầy đủ chức năng có thể được nhân bản ở nơi khác trên nhánh chính cũng như một bản sao làm việc cục bộ có thể kéo và đẩy.
Tất cả điều này có vẻ rõ ràng đối với một số người, nhưng git làm tôi bối rối vào thời điểm tốt nhất (đó là lỗi và thông báo trạng thái thực sự cần một số làm lại) - hy vọng, điều này sẽ giúp những người khác.
--shared
tùy chọninit
nếu bạn dự định nhờ người khác đẩy vào repo này. Nó tự động thêm quyền ghi nhóm vào kho lưu trữ - liên kết