Як перетворити клон git лише для читання з github у роздільний


79

Час від часу я стикаюся з цим питанням.

Скажімо, я читав вихідний код рейок, оскільки зіткнувся з деякими проблемами.

git clone git://github.com/rails/rails.git

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

Пам’ятайте, коли я клонував, я клонував не розгалужену версію, а лише версію для читання.

Це не те, що я проти вилки. Просто іноді я думаю, що просто збираюся переглянути, то хочу щось додати.


Я хотів би зареєструватися і побачити, чи відповідає вам моя відповідь, чи вам все-таки потрібна додаткова інформація. Якщо вам потрібні додаткові пояснення чи роз’яснення, дайте мені знати, і я можу спробувати вам допомогти. Якщо ні, то, можливо, ви захочете прийняти відповідь, щоб вказати, що на це питання адекватно відповіли.
Брайан Кемпбелл,

Відповіді:


112

Коли ви клонуєте репо, він автоматично встановлює віддалений виклик, originякий посилається на репо, яке ви клонували. Зараз це вказує на проект Rails вище, але вам потрібно створити власну вилку, до якої можна натиснути, а потім встановити пульт, який вказує туди, щоб можна було натиснути на нього.

Першим кроком є ​​натискання кнопки "Fork" на попередній сторінці проекту GitHub (малюнок з інструкцій GitHub щодо розгалуження ):

Кнопка виделки GitHub

Після цього знайдіть та скопіюйте URL-адресу цього репозитарію. Переконайтеся, що ви використовуєте URL-адресу SSH, яка має доступ для читання та запису. Це має бути приблизно так git@github.com:nadal/rails.git, якщо припустити, що ваше ім’я користувача nadal.

Тепер ви можете створити пульт, який дозволяє Git відстежувати віддалене сховище, витягуючи з нього або натискаючи на нього, залежно від вашого доступу. Ви можете замінити originна той, до якого ви натискаєте (тобто скільки людей це налаштовано), або залишити originвказівник на вищий потік і замість цього створити новий пульт. Я покажу, як зробити перше налаштування; друге повинно бути легко зрозуміти.

Щоб змінити originвказівник на вашу форку на GitHub, ви, мабуть, захочете зберегти десь вищу гілку, тому перейменуйте її на upstream:

git remote rename origin upstream

Тепер створіть новий пульт, який вказує на вашу виделку:

git remote add -f origin git@github.com:nadal/rails.git

І тепер ви зможете натиснути на свою нову вилку:

git push origin master

Як тільки ви задоволені змінами, які ви підштовхнули до GitHub, і хочете, щоб хтось із команди Rails подивився на них, у вас є два варіанти. Один - відправити запит на витяг за допомогою GitHub; перегляньте там документи, як це зробити. Якщо у вас є лише одна або декілька невеликих виправлень, команда Rails вважає за краще створити квиток на маяк і прикріпити виправлення; див. інструкції щодо участі в Rails для отримання додаткової інформації.

редагувати Ось схема, яка вказує, що відбувається. Те, що ви зробили, - це просто клонувати репо рейок, розташованих вище за течією; так що тепер у вас є свій власний репозиторій на вашій власній машині, яка відноситься до , git://github.com/rails/rails.gitяк origin:

Github: git: //github.com/rails/rails.git
                    ^
                    |
Пульти: походження
                    |
Ваша машина: рейки /

Ось що ви отримаєте, якщо роздвоїли, а потім клонували вилку:

Github: git: //github.com/rails/rails.git <- git@github.com: nadal / rails.git
                                                           ^
                                                           |
Пульти: походження
                                                           |
Ваша машина: рейки /

Якщо ви будете слідувати моїм вказівкам, ось що ви отримаєте:

Github: git: //github.com/rails/rails.git <- git@github.com: nadal / rails.git
                        ^ ^
                        | |
Пульти: вихідне походження
                        | |
Ваша машина: \ ------------------------------- рейки /

Що схоже на версію, яку ви отримуєте форком, за винятком того, що вона також має upstreamпульт дистанційного керування, щоб ви могли відстежувати офіційні зміни та об’єднувати їх у свій код (якби ви створили розгалужену версію, ви, можливо, захочете додати upstreamпульт як Ну).


Можливо, ви насправді не захочете розщеплюватись, якщо, як говорить оригінальний плакат, він іноді може захотіти зберегти якусь роботу, не маючи жодного посилання на оригінал.
Адам Димітрук,

1
@adymitruk Ні, Оператор згадав, що він іноді клонує репозиторій вище за течією без розгалуження, але потім хоче внести свій внесок після цього. Він спеціально згадав, що хотів би внести свої зміни у роздільну версію Rails. Він нічого не сказав про бажання зберегти роботу без жодного посилання на оригінал.
Брайан Кемпбелл,

він може захотіти бути автором фактичного проекту, тоді, якщо він не хоче розгалужуватись ... настільки малоймовірно, як це.
Адам Димітрук,

Дякую за відповідь і вибачте за затримку з мого боку. Як я вже згадував, я не розгалужував рейки. У мене просто є клон рейок. Однак ваша відповідь передбачає, що я спочатку роздвоївся. Я правильно зрозумів?
Нік Вандербільт,

4
@Nadal Моя відповідь не передбачає, що ви вже створили форк. У моїй відповіді пояснюється, як перетворити ситуацію, в якій ви щойно клонували репо, у таку, в якій ви можете перенести свої зміни з локального репо у форк. Форкінг репо на GitHub просто робить копію на сервері, до якої ви можете натиснути; як тільки ви це зробите, мої інструкції показують вам, як вказати місцеве репо, яке ви створили, яке зараз вказує на офіційне репо рейок, а замість цього вказує на вашу вилку. Я додав схему, яка вказує, що відбувається; Сподіваюсь, це допоможе, повідомте мене, якщо у вас виникнуть додаткові запитання.
Брайан Кемпбелл,

3

Дуже простий спосіб переходу з клонованого на роздільний режим - використання hubобгортки з http://hub.github.com/ .

Коли це встановлено, просто запустіть

hub fork

у вашому клоні лише для читання.


Працює гарно. Вилка буде створена з тим самим віддаленим ім'ям, що і ваше ім'я користувача github.
Zitrax

1

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


Як додати інший пульт дистанційного керування. Вибачте. новачок у git world - -.
Нік Вандербільт,

1
Ви можете розгалужити пізніше, а потім натиснути на роздвоєне репо ... на випадок, якщо Ви ще не роздвоїлися. Форкінг робить власну "копію" сховища, яке вас цікавить.
Адам Димітрук,

наразі ви можете просто зробити нове репо на github. Додайте його як пульт до того, який ви клонували з репозиторію рейок, і натисніть лише на новий. Я думаю, що це те, за чим ви переслідуєте. Не потрібне роздвоєння.
Адам Димітрук,

1
git remote add myrepo git: //github.com/myid/mynotforkedrepo.git
Адам Димітрук

ви вже створили собі репо на github (чи деінде)?
Адам Димітрук,

0

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


1
Я не розумію, чому б у будь-якому випадку не хотілося бути роздвоєнням, адже це просто проста вилка! Це не зовсім нова версія проекту - лише ваша копія вихідного коду, до якого ви сподіваєтесь. Так само, як і серія виправлень.
альтернатива

1
Можливо, людина не має облікового запису Github, але все одно хотіла б внести свій внесок у проект. Вони можуть клонувати проект, редагувати та надсилати виправлення або свою гілку до вихідного проекту для включення. Але правда, немає реальної причини не розщедритися, якщо можете.
Свеніто
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.