Подтвердить что ты не робот

Добавить патч в проект Github без клонирования хранилища для Github?

У меня есть локальный репозиторий, который является полной копией репозитория в Github. Я внес изменения, которые я хотел бы внести в оригинальный проект.

Как я могу это сделать без перезагрузки моего проекта в Github? Я не думаю, что открытие вопроса - это правильный путь.

Я видел в Как я могу внести исправление в github?, что я должен разветкить проект, но поскольку мой локальный репозиторий "связан" с исходным репозиторием Github, Я не хочу его испортить.

Итак, если действительно не рекомендуется использовать патч каким-либо образом, но fork, как я могу просто разбить исходный проект, объединить мои изменения и затем поделиться ими с исходным репозиторием?

Если я удалю вилку после того, как я "совершил" изменение, но он еще не принят, исчезает ли моя фиксация?

4b9b3361

Ответ 1

Вы должны развивать проект, да. Однако это не означает, что вам нужно снова клонировать все содержимое локально.

Объяснение: простой способ просмотра репозитория git представляет собой график коммитов (он направлен и ацикличен, но это не имеет значения для этого обсуждения); и все узлы этого графа, т.е. коммиты, имеют уникальный идентификатор во всех репозиториях git в мире. Что касается ветвей, это просто символические ссылки на фиксацию (в выражении git, ветке - или теге - называется refspec).

Кроме того, вы никогда связаны с удаленным репозиторием. Единственное, на что вы действительно "связаны" - это граф фиксации. Удаленный репозиторий просто имеет набор refspecs (ветки, теги)... указывая на граф фиксации, который у них также есть - никто не любит свисающие ссылки. Когда вы клонируете репозиторий, вы получаете граф фиксации (и связанные деревья) и набор refspecs (т.е. Ветви, теги). Параметр refspec указывает на дерево. И об этом.

Это означает следующее:

  • у вас есть исходный github repo: график коммитов и связанных деревьев, набор refspecs;
  • вы клонировали его локально: тот же граф коммитов и связанных деревьев, тот же набор refspecs;
  • вы написали локально: вы добавили этот граф и связанные деревья и добавили новый набор refspecs.

ОК, сделайте следующее:

  • клонировать исходное репо на github: тот же граф коммитов и деревьев, что и оригинал; refspecs здесь, только предшествует удаленное имя, которое по умолчанию origin. И что теперь?
  • в вашем локальном репозитории, добавьте свою вилку в качестве удаленного;
  • нажмите на эту вилку (это заставит refspecs и деревья);
  • отправить запрос на перенос.

Добавление вилки в качестве пульта "просто":

git remote add myfork [email protected]:youruser/theproject

Нажмите на ссылку refspec (branch):

git push myfork mybranch

И затем отправьте запрос на перенос оригинальному автору.

Следует отметить, что теоретически вы можете добавить удаленный сервер в репозиторий git, который вообще не имеет никакого отношения к "оригинальному" репо: это просто, что обе диаграммы фиксации будут полностью не пересекаться друг с другом - однако, варианты использования этого редко встречаются

Ответ 2

Да, вы должны разветкить проект, но нет необходимости клонировать/тянуть/объединять что-либо. После того, как вы нажмете кнопку вилки, сделайте

git remote add yourfork [email protected]:<yourname>/<project>.git

и нажмите свою ветку на свою вилку с помощью

git push yourfork branchname

затем выдаст запрос на перенос.

Если вы удалите вилку после того, как патч будет объединен восходящим потоком, не должно быть никаких проблем. Я не уверен, что произойдет, когда вы удалите свою вилку, прежде чем это произойдет.

Не нужно ничего сливать.

Ответ 3

Вы всегда можете отправить файл исправления в службу поддержки по электронной почте. Ядро Linux было создано таким образом в течение очень долгого времени.

Ответ 4

Без использования текущей копии репозитория.

  • Создайте патчи с помощью format-patch.
  • Прокрутите вверх и клонируйте его, но не заменяйте свою рабочую копию.
  • Примените патчи с помощью git am к новому разветвленному проекту, нажмите их и создайте запрос слияния.

Это не самое приятное решение, но оно не позволяет вам случайно потерять ваши изменения.