tôi thêm câu trả lời này vì sau khi đến đây (với cùng một câu hỏi), không ai trong số các câu trả lời thực sự mô tả tất cả các bước cần thiết cần thiết để đi từ không có gì đến một repo hoàn toàn có thể sử dụng (trần) hoàn toàn có thể sử dụng được.
Lưu ý: ví dụ này sử dụng đườ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 đi cho những người ít quen thuộc hơn 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à populates nó với các tập tin git đại diện cho một repo git. Vì nó là viết tắt, repo này là vô ích - 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ể kéo nó ra.
Tiếp theo, chúng ta cần tạo thư mục hoạt động. Có một số cách để thực hiện việc này, tùy thuộc vào việc bạn 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ó file hiện hành) bằng cách nhân bản 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ỉ làm việc nếu /path/to/work
không tồn tại hoặc là một thư mục trống. 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
(bởi vì git branch
không trả về gì) và cho đến nay, không có cam kết.
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 [email protected]
> git commit -m "added afile"
[master (root-commit) 614ab02] added afile
1 file changed, 1 insertion(+)
create mode 100644 afile.txt
Lệnh git config
chỉ cần thiết nếu bạn chưa nói với chính mình 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 chi nhánh master
đượ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
Đây cũng là sai lầm - thượng nguồn đã không "ra đi", nó chỉ chưa được tạo ra chưa và git branch --unset-upstream
sẽ không giúp đỡ. Nhưng đó là OK, bây giờ mà chúng tôi có cam kết đầu tiên của chúng tôi, chúng tôi có thể đẩy và làm chủ sẽ được tạo ra 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ư 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 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 đó (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 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 tôi có cam kết đầu tiên của chúng tôi và chi nhánh chính tại địa phương mà chúng tôi cần chuyển sang nhánh thượng nguồn đượ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 ý cờ -u
trên git đẩy để đặt nhánh ngược dòng mới (theo dõi). Cũng giống như trước đây, bây giờ chúng ta có một repo trần đầy đủ chức năng mà có thể được nhân bản ở nơi khác trên một 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ẻ hiển nhiên đối với một số người, nhưng git làm phiền tôi nhiều nhất (đó là thông báo lỗi và trạng thái thực sự cần sửa lại) - hy vọng điều này sẽ giúp người khác.
Bạn cũng có thể thêm tùy chọn '--shared' cho' init' nếu bạn định có người khác đẩy tới repo này. Nó tự động thêm quyền ghi nhóm vào kho lưu trữ - [link] (http://git-scm.com/book/en/Git-on-the-Server-Getting-Git-on-a-Server) – prasanthv
Tôi nghĩ rằng những ba dòng có cùng tác dụng so với chỉ có một dòng: git --bare init test_repo.git Ít nhất với phiên bản git hiện tại của tôi (1.8.2.2) –
@Fran Không tốt cho 1.7. * Phiên bản có vẻ như: \ – deepdive