2013-06-15 27 views
9

Khi bạn đã tạo ra một github-repo và bổ sung các github-repo như xalà gì git thượng nguồn

git remote add origin https://github.com/githubname/reponame.git 

thì bạn cần phải đẩy đầu tiên bạn cam kết với

git push -u origin master 

Tôi đọc (Why do I need to do `--set-upstream` all the time?) rằng đây là một hình thức ngắn để làm

git branch --set-upstream-to my_branch origin/my_branch 
git push 

Chính xác ở trên và tại sao tôi cần phải thiết lập? Có rất ít thông tin về điều này trên mạng. Tôi biết rằng có một chủ đề tương tự What does 'git remote add upstream' help achieve?, nhưng theo ý kiến ​​của tôi nó không giải thích chính xác những gì thượng lưu là gì và những gì git push -u origin master hiện, đặc biệt là những gì là origin master trỏ đến, là nó repo địa phương hoặc repo từ xa?

+0

Xem thêm câu hỏi này: https://stackoverflow.com/questions/5697750/what-exactly-does-the-u-do-git-push-u-origin-master-vs-git-push-origin- ma – TuringTux

Trả lời

20

Trong lệnh

git push -u origin master 

Các -u cờ có nghĩa là chi nhánh địa phương của bạn sẽ trở thành một theo dõi chi nhánh. Tức là, một chi nhánh theo dõi một chi nhánh từ xa, để tương lai git pull sẽ biết chi nhánh nào sẽ hợp nhất và git push sẽ được chuyển hướng đến chi nhánh chính xác.

origin là điều khiển từ xa bạn đang cố gắng.

master là thông số refspec. Tham số refspec chỉ định nhánh cục bộ nào được đẩy tới nhánh xa nào. Nó có thể phức tạp, nhưng trong trường hợp này, hình thức ngắn master có nghĩa là đẩy chi nhánh địa phương master đến nhánh từ xa có cùng tên, origin/master.

Về mặt kỹ thuật, theo dõi thêm các thông tin sau về chi nhánh master để .git/config của bạn:

[branch "master"] 
    remote = origin 
    merge = refs/heads/master 

và nó tạo ra một tập tin ở đây .git/refs/remotes/origin/master, đại diện cho chi nhánh từ xa.

+0

Bạn có thể vui lòng thêm một lời giải thích về những gì chủ gốc đang trỏ đến trong lệnh $ git push -u origin master và tôi sẽ chọn câu trả lời của bạn là giải quyết. – patriques

+0

@patriques Đã thêm. –

+3

Chi nhánh-refspec không phải là khó: 'master' là viết tắt của' master: master' trong đó "master" đầu tiên định nghĩa địa phương và "master" thứ hai từ xa branch :) – KingCrunch

1

"Upstream" là repo bạn nhân bản (một số) các chi nhánh của bạn, và nơi bạn đẩy các thay đổi cho các nhánh đó (và toàn bộ các nhánh mới) một khi chúng đã được cam kết. GitHub hoạt động như thượng nguồn của bạn bởi vì chúng lưu trữ các bản sửa đổi cho bạn, ở một vị trí tập trung.

+2

Điều này là sai. Thượng lưu là một mối quan hệ giữa các chi nhánh, không phải là repos. – millimoose

+0

@millimoose: Tốt hơn? –

+2

Không thực sự. * Upstream *, theo nghĩa "thứ mà' --set-upstream' giao dịch với ", không phải là một mối quan hệ ở mức repo chút nào. Các chi nhánh địa phương khác nhau có thể có thượng lưu của họ thiết lập cho các chi nhánh trong điều khiển từ xa khác nhau, hoặc thậm chí đến các chi nhánh địa phương. (Ví dụ: các nhánh tính năng theo dõi 'master'.) Nói" GitHub đóng vai trò là thượng nguồn "của bạn chỉ là gây hiểu nhầm vì nó làm cho ý nghĩa của thuật ngữ trong ngữ cảnh của một luồng công việc phát triển, và ý nghĩa của nó trong Git parlance mà OP là hỏi về. – millimoose

Các vấn đề liên quan