Git: синхронизировать теги из апстрима - PullRequest
0 голосов
/ 09 мая 2018

Я создал форк ( this , origin ) хранилища ( this , upstream ).

Единственная разница между upstream и origin заключается в этом коммите два года назад, с которым я добавил файл composer.json.
(по сути, владелец репозитория не предоставил никакой возможности для добавления этого файла, поэтому я создал форк, который позволяет существовать пакету на Packagist )

Теперь проблема в следующем: новые теги и новые выпуски естественно публикуются в upstream .

Я бы хотел, чтобы у моего форка были синхронные теги и выпуски с upstream , но с присутствующим файлом composer.json (и, следовательно, с сохранением этого коммита).

Какой самый лучший и простой способ сделать это?
Ветвь master моего форка содержит этот коммит, но я не могу извлечь локальный тег и объединить ветку master , в противном случае изменения уже присутствуют в основной ветке ветка также будет добавлена.

$ git fetch upstream 
Da https://github.com/js-cookie/js-cookie
 * [nuova tag]       latest        -> latest
 * [nuova tag]       v1.0          -> v1.0
 * [nuova tag]       v1.1          -> v1.1
 * [nuova tag]       v1.2.0        -> v1.2.0
 * [nuova tag]       v1.3.0        -> v1.3.0
 * [nuova tag]       v1.3.1        -> v1.3.1
 * [nuova tag]       v1.4.0        -> v1.4.0
 * [nuova tag]       v1.4.1        -> v1.4.1
 * [nuova tag]       v1.5.0        -> v1.5.0
 * [nuova tag]       v1.5.1        -> v1.5.1
 * [nuova tag]       v2.0.0        -> v2.0.0
 * [nuova tag]       v2.0.0-beta.1 -> v2.0.0-beta.1
 * [nuova tag]       v2.0.1        -> v2.0.1
 * [nuova tag]       v2.0.2        -> v2.0.2
 * [nuova tag]       v2.0.3        -> v2.0.3
 * [nuova tag]       v2.0.4        -> v2.0.4
 * [nuova tag]       v2.1.0        -> v2.1.0
 * [nuova tag]       v2.1.1        -> v2.1.1
 * [nuova tag]       v2.1.2        -> v2.1.2
 * [nuova tag]       v2.1.3        -> v2.1.3
 * [nuova tag]       v2.1.4        -> v2.1.4
 * [nuova tag]       v2.2.0        -> v2.2.0
$ git checkout v2.2.0 
Note: checking out 'v2.2.0'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by performing another checkout.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -b with the checkout command again. Example:

  git checkout -b <new-branch-name>

HEAD si trova ora a 34f056c Release version 2.2.0
$ git merge master 
Aggiornamento di 34f056c..9a69123
Fast-forward
 Gruntfile.js     | 136 ++++++++++++++++++++++++++++++++++++++++++++++++++++-----------------------------------------------------------------------
 LICENSE          |  35 ++++++++++++++++----------------
 README.md        |  29 +++++++++++++++++++++------
 SERVER_SIDE.md   |   6 +++---
 composer.json    |  13 ++++++++++++
 package.json     |   4 ++--
 src/js.cookie.js |  73 ++++++++++++++++++++++++++++++++----------------------------------
 test/tests.js    |  23 +++++++++++++++++----
 test/utils.js    |   8 +++++++-
 9 files changed, 177 insertions(+), 150 deletions(-)
 create mode 100644 composer.json

1 Ответ

0 голосов
/ 09 мая 2018

Прежде всего, я удивляюсь, почему он больше не работает, он работал в прошлом. Неужели Packagist недавно изменил свою логику и проверил composer.json в каждом теге, а до этого только в master?

Тем не менее два возможных решения этой проблемы, которые только что пришли мне в голову. Может быть, у кого-то еще есть другая идея.

Решение 1 - Исправление тегов

Здесь скрипт bash для добавления коммита с composer.json ко всем тегам.

#!/usr/bin/env bash

TAGS=`git tag -l`
# this is the commit hash from the point where you added composer.json. Its actually the correct one, I used your repo.
COMMIT="2b5c20eb2ad3ab624eb3eca5e86f06132cf9b216"

for TAG in $TAGS; do
   # Checkout tag
   git checkout $TAG
   # Apply composer.lock commit
   git cherry-pick $COMMIT
   # Remove old tag
   git tag -d $TAG
   # Create new tag
   git tag $TAG
   # Remove tag on origin
   git push origin :$TAG
   # Add tag to origin
   git push origin $TAG
done

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

Также становится грязно, если вам нужно изменить composer.json в какой-то момент, и у вас больше нет одного коммита.

Решение 2 - Объединение с компонентами

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

Возможно, создаете проблему или спросите, могут ли они помочь вам с рабочим процессом, который они используют. Из того, что я вижу, их репозитории не являются клоном 1: 1, поскольку это действительно только конечный результат. В случае начальной загрузки он добавляет скомпилированные css-файлы и удаляет все файлы и конфиги, необходимые для его компиляции (например, babelrc, travis). Так что это кажется довольно обычным для каждой библиотеки. Вероятно, у них разные сценарии bash для каждой библиотеки, которые каждый день проверяют наличие новых выпусков и обновляют их репозиторий Shim.

См. https://github.com/components/components

И вы можете сравнить https://github.com/components/bootstrap с https://github.com/twbs/bootstrap

Может быть, с компонентами или без них вы могли бы написать собственный скрипт, который более или менее делает то же, что и они, - проверяет наличие новых тегов, если новый тег, тег проверки; скопируйте js-файл в наш репозиторий, добавьте туда composer.json; совершить; создать и вставить тег в репо.

Обход

Если кто-то ищет обходной путь до тех пор, пока это не будет исправлено, то здесь рабочий composer.json, который напрямую использует исходный репо:

{
  "name": "xxx/yyy",
  "description": "xxxx",
  "type": "xxxx",
  "license": "GPL-3.0+",
  "require":{
    "js-cookie/js-cookie": "^2.2.0"
  },
  "repositories": [
    {
      "type": "package",
      "package": {
        "name": "js-cookie/js-cookie",
        "version": "2.2.0",
        "source": {
          "url": "https://github.com/js-cookie/js-cookie.git",
          "type": "git",
          "reference": "v2.2.0"
        }
      }
    }
  ]
}

Самый большой недостаток в том, что вам нужно вручную проверить и изменить версию. Вот почему это не решение, а только обходной путь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...