Що таке "походження" в Git?


582

Коли я бігаю:

git push origin branchname

Що саме таке originі чому я повинен вводити його перед назвою гілки?


63
"origin" - це назва віддаленого сховища, в якому ви хочете опублікувати ваші зобов'язання. За умовою віддалений сховище за замовчуванням називається "початком", але ви можете працювати з декількома віддаленими (з різними іменами) одночасно. Більше інформації тут (наприклад): gitref.org/remotes
Benoit Courtine

1
Слід також зазначити , що походження є «вгору по течії» репо: см stackoverflow.com/questions/2739376 / ...
VonC


Але тоді, коли ви використовуєте git fetch, а потім гілку git, -r локальні гілки є попередньо походженням / ugh: - / atlassian.com/git/tutorials/syncing/git-fetch
brat

Перевірте .git \ config-файл, який містить відображення псевдонімів до URL-адрес, папка .git за замовчуванням прихована.
Abhijeet Patel

Відповіді:


568

originє псевдонімом вашої системи для певного віддаленого сховища. Це насправді не властивість цього сховища.

Роблячи

git push origin branchname

ви говорите, щоб перейти до originсховища. Немає вимоги називати віддалене сховище origin: адже той самий сховище може мати інший псевдонім для іншого розробника.

Віддалені просто псевдонім, який зберігає URL-адресу сховищ. Ви можете побачити, яка URL-адреса належить кожному віддаленому користувачу, скориставшись

git remote -v

У pushкоманді ви можете використовувати дистанційні або просто використовувати URL-адресу безпосередньо. Приклад, що використовує URL:

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

1
Чи може один пульт бути псевдонімом для кількох інших дистанційних? Що робити, якщо я хотів, щоб один пульт перейшов на кілька інших віддалених? Наприклад, натиснути на основне репо, а натиснути на резервне репо? Чи було б це розумною справою в деяких ситуаціях? EDIT: Тут є кілька рішень .
Янкі

1
Що робити, якщо я опущу ключове слово "походження"? Коли ми говоримо "git push", чи не буде все-таки пересилати всі комісії до віддаленого сховища? Додавання ключового слова "походження" видається зайвим.
Mugen

@Mugen У документах git pushви можете побачити, що він спочатку перевіряє конфігурацію цього сховища (яке ви можете перевірити git config --list) на ключ, який називається branch.<branchname>.remote. Якщо це не встановлено, "він за замовчуванням походить" - git-scm.com/docs/git-push
Кенмор

156

origin- це не назва віддаленого сховища. Це скоріше локальний псевдонім, встановлений як ключ замість URL-адреси віддаленого сховища.

Це дозволяє уникнути того, що користувачеві потрібно вводити всю віддалену URL-адресу під час запрошення натискання.

Це ім'я встановлено за замовчуванням, і за умовами домовленості Git при клонуванні з пульта вперше.

Це ім'я псевдоніму не важко закодовано і його можна змінити, використовуючи наступний командний рядок:

git remote rename origin mynewalias

Погляньте на http://git-scm.com/docs/git-remote для подальших роз'яснень.


1
Що робити, якщо я опущу ключове слово "походження"? Коли ми говоримо "git push", чи не буде все-таки пересилати всі комісії до віддаленого сховища? Додавання ключового слова "походження" видається зайвим.
Mugen

74

Git має поняття "віддалені", які є просто URL-адресами до інших копій вашого сховища. Коли ви клонуєте інший сховище, Git автоматично створює віддалене ім'я "походження" і вказує на нього.

Додаткову інформацію про пульт можна переглянути, ввівши git remote show origin.


1
Команди git дуже бентежать початківців. Я думаю, це стосується історії цієї системи управління версіями. Отже, питання: Замість git remote show originчого, чому не просто git show origin? Має бути причина, що це? Дякую.
Stack0verflow

5
@ Stack0verflow: це, мабуть, краще задати як нове запитання, щоб люди могли зробити дослідження, якщо вам цікаво. "git show" - це вже інша команда, яка демонструє фіксацію, і технічно нічого не заважатиме тобі мати гілку під назвою "origin" на додаток до віддаленого покликаного походження ...
Jason Malinowski


24

Просто! "origin" - це саме те, що ви дали прізвисько своєму віддаленому сховищу, коли ви запустили таку команду:

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

З цього моменту Git знає, що "походження" вказує на конкретний сховище (в даному випадку на сховище GitHub). Ви могли б назвати це "github" або "repo" або що завгодно.


19

Мене це також бентежило, і нижче - те, що я дізнався.

Коли ви клонуєте сховище, наприклад, з GitHub:

  • originпсевдонім для URL-адреси, з якої ви клонували сховище. Зауважте, що ви можете змінити цей псевдонім.

  • У masterвіддаленому сховищі є одна гілка (псевдонім від origin). Є ще одна masterфілія, створена на місцевому рівні.

Додаткову інформацію можна знайти в цьому запитанні ТА: Розгалуження Git: master vs. origin / master vs. віддалено / origin / master


11

Коли ви клонуєте сховище git clone, він автоматично створює віддалене з'єднання, яке називається originвказівкою назад на клонований сховище. Це корисно для розробників, які створюють локальну копію центрального сховища, оскільки це забезпечує простий спосіб витягнути зміни в потоці чи опублікувати локальні комісії. Така поведінка також є причиною того, що більшість проектів на базі Git називають своє походження в центральне сховище.


3

Найкраща відповідь тут:

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

У Git "origin" - це скорочена назва віддаленого сховища, з якого спочатку був клонований проект. Точніше, він використовується замість оригінальної URL-адреси цього сховища - і тим самим значно спрощує посилання.


0

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

У Git "origin" - це скорочена назва віддаленого сховища, з якого спочатку був клонований проект. Точніше, він використовується замість оригінальної URL-адреси цього сховища - і тим самим значно спрощує посилання.

Зауважте, що походження - це аж ніяк не "магічне" ім'я, а лише стандартна умова. Хоча є сенс залишати цю конвенцію недоторканою, ви можете її безперечно перейменувати, не втрачаючи жодної функціональності.

У наступному прикладі параметр URL для команди "clone" стає "початком" для клонованого локального сховища:

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

Коли ви копіюєте вміст, написаний іншими, ви повинні дати зрозуміти, що ви це робите, і ви завжди повинні містити посилання на джерело. Інакше це плагіат, і це привід видалити відповідь. Крім того, ваша відповідь вже була розміщена .
Фабіо каже, що

0

Інші відповіді кажуть, що originце псевдонім для URL-адреси віддаленого сховища, який не зовсім точний. Слід зазначити , що адреса , який починається з httpє URL в той час як той , який починається з git@є URI ідентифікатора або універсального ресурсу.

Усі URL-адреси є URI-адресами, але не всі URI-адреси є URL-адресами.

Коротше кажучи, коли ви вводите, git remote add origin <URI>ви говорите місцевому git, що кожного разу, коли ви вживаєте слово, originви фактично маєте на увазі вказаний вами URI. Подумайте про це як про змінну, яка містить значення.

І точно так само , як і змінна, ви можете назвати це все , що ви хочете (наприклад. github, heroku, destinationІ т.д.).


0

віддалене (псевдонім URL-сховища) → походження (псевдонім вище) → головний (псевдонім гілки);

  • remote, Рівень такої ж , як working directory, index, repository,

  • origin, карта локальної філії сховища до віддаленої гілки сховища

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.