Làm cách nào để thực hiện một lần đẩy ban đầu đến một kho lưu trữ từ xa bằng Git?


173

Tôi đã đọc qua vô số hướng dẫn và tôi tiếp tục đến gần. Đây là những gì tôi đã có:

- Tôi đang chạy RubyMine trên máy tính để bàn Windows của mình
- Tôi đã cài đặt Git trên tài khoản lưu trữ WebFaction theo hướng dẫn của họ
- Git dường như hoạt động tốt trên cả hai máy

Đây là những gì tôi đang làm:
1. Trên máy chủ:
         a. dự án mkdir
         b. git init
         c. git thêm.
         d. git commit <--- "không có gì để cam kết"
2. Trên máy khách:
         a. Tạo dự án mới trong RubyMine.
         b. "Git init" trong thư mục trên cùng của dự án
         c. "Đẩy thay đổi" đến máy chủ <---- "không thể đẩy một số ref đến ...".

Tôi đang thiếu những bước nào?

Câu trả lời:


393

Trên máy chủ:

mkdir my_project.git
cd my_project.git
git --bare init

Trên máy khách:

mkdir my_project
cd my_project
touch .gitignore
git init
git add .
git commit -m "Initial commit"
git remote add origin youruser@yourserver.com:/path/to/my_project.git
git push origin master

Lưu ý rằng khi bạn thêm nguồn gốc, có một số định dạng và lược đồ bạn có thể sử dụng. Tôi khuyên bạn nên xem những gì dịch vụ lưu trữ của bạn cung cấp.


Điều duy nhất tôi đã thay đổi, vì tôi đang làm việc với RubyMine, là tôi đã thay thế cảm ứng .gitignore bằng cách tạo một dự án đường ray với 66 tệp mặc định của nó. Cảm ơn rât nhiều!
Donald Hughes

Kudos để liệt kê các lệnh. Đây là cách tôi đã thiết lập các kho lưu trữ từ xa.
Dave Bacher

5
Tôi nên thêm rằng nếu bạn muốn người khác cộng tác với bạn trên repo này, bạn nên thêm --sharedvào cuối git --bare initlệnh. Điều này sẽ thiết lập các quyền cần thiết.
Josh Lindsey

Cảm ơn câu trả lời này. Sẽ rất hữu ích khi có những thứ như thế này lấp đầy những thứ còn thiếu trong những cuốn sách rất hay trên git, nhưng vẫn không bao gồm nhiều công việc chuyển đổi từ CVS.
bạch tuộc

21
Tôi thích chạy git push --set-upstream origin masterthay vì git push origin masterlần đầu tiên. Điều này cho phép tôi chỉ cần gõ git pushhoặc git pullthay vì git push origin mastermọi lúc. Bất cứ điều gì phù hợp với sở thích của bạn.
Rick Smith

8

Bạn có thể thử điều này:

trên máy chủ:

thêm nhóm mới để /etc/groupthích (ví dụ)

mygroup:1001:michael,nir

tạo kho git mới:

mkdir /srv/git
cd /srv/git
mkdir project_dir
cd project_dir
git --bare init (initial git repository )
chgrp -R mygroup objects/ refs/ (change owner of directory )
chmod -R g+w objects/ refs/ (give permission write)

trên Máy khách:

mkdir my_project
cd my_project
touch .gitignore
git init
git add .
git commit -m "Initial commit"
git remote add origin youruser@yourserver.com:/path/to/my_project.git
git push origin master

(Cảm ơn Josh Lindsey cho phía khách hàng)

Sau Client, thực hiện trên Server lệnh này:

cd /srv/git/project_dir
chmod -R g+w objects/ refs/

Nếu gặp lỗi này sau khi kéo git:

There is no tracking information for the current branch. Please specify which branch you want to merge with. See git-pull(1) for details

git pull <remote> <branch>
If you wish to set tracking information for this branch you can do so with:

git branch --set-upstream new origin/<branch>

thử:

git push -u origin master

Nó sẽ giúp.


5

Bạn phải thêm ít nhất một tệp vào kho lưu trữ trước khi cam kết, vd .gitignore.


Tôi đoán cách tôi đang cố sử dụng là thêm các tệp ban đầu từ máy khách của mình, vì đó là nơi tôi viết mã. Là khái niệm ra khỏi vị trí trong git? Tôi có cần phải cam kết với khách hàng trước và sau đó đẩy đến máy chủ không?
Donald Hughes

5

Nếu dự án của bạn không có nhánh ngược dòng, thì đó là nếu đây là lần đầu tiên kho lưu trữ từ xa sẽ biết về nhánh được tạo trong kho lưu trữ cục bộ của bạn, lệnh sau sẽ hoạt động.

git push --set-upstream origin <branch-name>

3

@Josh Lindsey đã trả lời hoàn toàn tốt. Nhưng tôi muốn thêm một số thông tin vì tôi thường sử dụng ssh.

Do đó, chỉ cần thay đổi:

git remote add origin youruser@yourserver.com:/path/to/my_project.git

đến:

git remote add origin ssh://youruser@yourserver.com/path/to/my_project

Lưu ý rằng dấu hai chấm giữa tên miền và đường dẫn không còn nữa.


1

Bạn cần thiết lập kho lưu trữ từ xa trên máy khách của mình:

git remote add origin ssh://myserver.com/path/to/project

Tôi đã chạy lệnh đó, nhưng một "git đẩy gốc master" vẫn dẫn đến một "thất bại trong việc đẩy một số ref". Tôi đã thử làm một "git pull master master" và nhận được "không thể tìm thấy master ref từ xa".
Donald Hughes

Tôi không chắc liệu nó có tạo ra sự khác biệt hay không, nhưng các kho lưu trữ từ xa của tôi được tạo ra git --bare initnhư @Josh Lindsey khuyến nghị.
Dave Bacher

tôi có cùng một vấn đề "thất bại trong việc đẩy một số ref" ... cố gắng đẩy nhánh master từ repo sang một cái tôi đã tạo ... sau đó tôi nhận thấy nguồn không có nhánh chính - hãy chắc chắn rằng nhánh bạn đang thử để đẩy tồn tại :)
Datum Geek
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.