Nguồn gốc của Nhật Bản là gì trong Git?


583

Khi tôi chạy:

git push origin branchname

Chính xác là gì originvà tại sao tôi phải gõ nó trước tên chi nhánh?


63
"origin" là tên của kho lưu trữ từ xa nơi bạn muốn xuất bản bạn cam kết. Theo quy ước, kho lưu trữ từ xa mặc định được gọi là "origin", nhưng bạn có thể làm việc với một số điều khiển từ xa (với các tên khác nhau) cùng một lúc. Thêm thông tin ở đây (ví dụ): gitref.org/remotes
Benoit Courtine

1
Cũng lưu ý rằng nguồn gốc là một repo "ngược dòng": xem stackoverflow.com/questions/2739376/iêu
VonC


Nhưng sau đó khi sử dụng git fetch và sau đó git nhánh -r các nhánh cục bộ được thêm vào nguồn gốc / ugh: - / atlassian.com/git/tutorials/syncing/git-fetch
brat

Kiểm tra tệp .git \ config nó chứa ánh xạ của các bí danh cho các URL, thư mục .git được ẩn theo mặc định.
Abhijeet Patel

Câu trả lời:


569

originlà một bí danh trên hệ thống của bạn cho một kho lưu trữ từ xa cụ thể. Nó không thực sự là một tài sản của kho lưu trữ đó.

Bằng cách làm

git push origin branchname

bạn đang nói để đẩy vào originkho lưu trữ. Không có yêu cầu đặt tên cho kho lưu trữ từ xa origin: trên thực tế, cùng một kho lưu trữ có thể có bí danh khác cho nhà phát triển khác.

Điều khiển từ xa chỉ đơn giản là một bí danh lưu trữ URL của kho lưu trữ. Bạn có thể xem URL nào thuộc về mỗi điều khiển từ xa bằng cách sử dụng

git remote -v

Trong pushlệnh, bạn có thể sử dụng điều khiển từ xa hoặc đơn giản là bạn có thể sử dụng URL trực tiếp. Một ví dụ sử dụng URL:

git push git@github.com:git/git.git master

1
Một điều khiển từ xa có thể là bí danh cho nhiều điều khiển từ xa khác không? Điều gì sẽ xảy ra nếu tôi muốn một điều khiển từ xa để chuyển sang nhiều điều khiển từ xa khác? Ví dụ, đẩy đến một repo chính, và đẩy đến một repo dự phòng? Đó sẽ là một điều hợp lý để muốn trong một số tình huống? EDIT: Có một số giải pháp ở đây .
Yankee

1
Nếu tôi bỏ qua từ khóa "gốc" thì sao? Khi chúng ta nói "git đẩy", không phải nó sẽ đẩy tất cả các cam kết vào kho lưu trữ từ xa sao? Thêm từ khóa "nguồn gốc" có vẻ dư thừa.
Mugen

@Mugen Trong các tài liệu cho git pushbạn có thể thấy rằng trước tiên nó sẽ kiểm tra cấu hình cho kho lưu trữ đó (mà bạn có thể kiểm tra git config --list) cho một khóa được gọi branch.<branchname>.remote. Nếu điều đó không được đặt, "nó mặc định là nguồn gốc" - git-scm.com/docs/git-push
Kenmore

157

originkhông tên kho từ xa. Nó là một bí danh địa phương bộ được đặt làm khóa thay cho URL kho lưu trữ từ xa.

Nó tránh người dùng phải gõ toàn bộ URL từ xa khi nhắc đẩy.

Tên này được đặt theo mặc định và theo quy ước của Git khi nhân bản từ xa lần đầu tiên.

Tên bí danh này không được mã hóa cứng và có thể được thay đổi bằng dấu nhắc lệnh sau:

git remote rename origin mynewalias

Hãy xem http://git-scm.com/docs/git-remote để biết thêm chi tiết.


1
Nếu tôi bỏ qua từ khóa "gốc" thì sao? Khi chúng ta nói "git đẩy", không phải nó sẽ đẩy tất cả các cam kết vào kho lưu trữ từ xa sao? Thêm từ khóa "nguồn gốc" có vẻ dư thừa.
Mugen

74

Git có khái niệm "điều khiển từ xa", đơn giản là các URL tới các bản sao khác của kho lưu trữ của bạn. Khi bạn sao chép một kho lưu trữ khác, Git sẽ tự động tạo một điều khiển từ xa có tên "origin" và trỏ đến nó.

Bạn có thể xem thêm thông tin về điều khiển từ xa bằng cách gõ git remote show origin.


1
lệnh git rất khó hiểu cho người mới bắt đầu. Tôi đoán nó có liên quan đến lịch sử của hệ thống kiểm soát phiên bản này. Vì vậy, câu hỏi: Thay vì git remote show origin, tại sao không đơn giản git show origin? Phải có một lý do, nó là gì? Cảm ơn.
Stack0verflow

5
@ Stack0verflow: đây có thể là câu hỏi mới tốt hơn để mọi người có thể thực hiện nghiên cứu nếu bạn tò mò. 'git show' đã là một lệnh khác thể hiện cam kết và về mặt kỹ thuật sẽ không có gì ngăn cản bạn có một nhánh gọi là 'origin' ngoài việc có một nguồn gốc được gọi là nguồn gốc ...
Jason Malinowski

44

originbí danh mặc định cho URL của kho lưu trữ từ xa của bạn.


24

Đơn giản! "Origin" chỉ là những gì bạn đặt biệt danh cho kho lưu trữ từ xa của bạn khi bạn chạy một lệnh như thế này:

git remote add origin git@github.com:USERNAME/REPOSITORY-NAME.git

Từ đó trở đi, Git biết rằng "nguồn gốc" trỏ đến kho lưu trữ cụ thể đó (trong trường hợp này là kho lưu trữ GitHub). Bạn có thể đặt tên nó là "github" hoặc "repo" hoặc bất cứ thứ gì bạn muốn.


19

Tôi cũng bối rối vì điều này, và dưới đây là những gì tôi đã học được.

Khi bạn sao chép một kho lưu trữ, ví dụ từ GitHub:

  • originlà bí danh cho URL mà bạn đã sao chép kho lưu trữ. Lưu ý rằng bạn có thể thay đổi bí danh này.

  • Có một masternhánh trong kho lưu trữ từ xa (bí danh bởi origin). Ngoài ra còn có một masterchi nhánh khác được tạo ra tại địa phương.

Thông tin thêm có thể được tìm thấy từ câu hỏi SO này: Phân nhánh Git: master so với origin / master so với điều khiển từ xa / origin / master


11

Khi bạn sao chép một kho lưu trữ git clone, nó sẽ tự động tạo một kết nối từ xa được gọi là origintrỏ trở lại kho lưu trữ nhân bản. Điều này hữu ích cho các nhà phát triển tạo một bản sao cục bộ của kho lưu trữ trung tâm vì nó cung cấp một cách dễ dàng để kéo các thay đổi ngược dòng hoặc xuất bản các cam kết cục bộ. Hành vi này cũng là lý do tại sao hầu hết các dự án dựa trên Git gọi nguồn gốc kho lưu trữ trung tâm của họ.


3

Câu trả lời tốt nhất ở đây:

https://www.git-tower.com/learn/git/glossary/origin

Trong Git, "origin" là tên viết tắt của kho lưu trữ từ xa mà dự án ban đầu được sao chép từ đó. Chính xác hơn, nó được sử dụng thay cho URL của kho lưu trữ ban đầu - và do đó làm cho việc tham chiếu dễ dàng hơn nhiều.


0

Từ https://www.git-tower.com/learn/git/glossary/origin :

Trong Git, "origin" là tên viết tắt của kho lưu trữ từ xa mà dự án ban đầu được sao chép từ đó. Chính xác hơn, nó được sử dụng thay cho URL của kho lưu trữ ban đầu - và do đó làm cho việc tham chiếu dễ dàng hơn nhiều.

Lưu ý rằng nguồn gốc không có nghĩa là một tên "ma thuật", mà chỉ là một quy ước tiêu chuẩn. Mặc dù thật hợp lý khi để nguyên tắc này không bị ảnh hưởng, bạn hoàn toàn có thể đổi tên nó mà không mất bất kỳ chức năng nào.

Trong ví dụ sau, tham số URL cho lệnh "clone" trở thành "nguồn gốc" cho kho lưu trữ cục bộ nhân bản:

git clone https://github.com/gittower/git-crash-course.git

Khi bạn sao chép nội dung được viết bởi người khác, bạn phải làm rõ rằng bạn đang làm như vậy và bạn phải luôn bao gồm một liên kết đến nguồn. Nếu không, đó là đạo văn, và đó là một lý do để xóa câu trả lời. Bên cạnh đó, câu trả lời của bạn đã được đăng .
Fabio nói Phục hồi lại

0

Các câu trả lời khác nói rằng đó originlà bí danh cho URL của kho lưu trữ từ xa không hoàn toàn chính xác. Cần lưu ý rằng một địa chỉ bắt đầu bằng httpmột URL trong khi một địa chỉ bắt đầu bằng git@một URI hoặc Mã định danh tài nguyên chung.

Tất cả các URL là URI, nhưng không phải tất cả các URI đều là URL.

Nói tóm lại, khi bạn gõ git remote add origin <URI>bạn đang nói với git cục bộ của bạn rằng bất cứ khi nào bạn sử dụng từ originbạn thực sự có nghĩa là URI mà bạn đã chỉ định. Hãy nghĩ về nó giống như một biến giữ một giá trị.

Và cũng giống như một biến, bạn có thể đặt tên cho nó bất cứ điều gì bạn muốn (ví dụ. github, heroku, destination, Vv).


0

từ xa (bí danh url kho lưu trữ) → nguồn gốc (bí danh ngược dòng) → chủ (bí danh nhánh);

  • remote, Mức độ tương tự như working directory, index, repository,

  • origin, ánh xạ nhánh kho lưu trữ cục bộ đến nhánh kho lưu trữ từ xa

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.