Как получить последние коммиты из удаленного репозитория?

#git

#git

Вопрос:

В нашей команде только человеку B разрешено отправлять изменения в наш удаленный репозиторий. Другие разработчики, такие как person A, создают форк этого удаленного репозитория. Лицо В должно позаботиться о том, чтобы изменения лица А попали в удаленный репозиторий.

Допустим, что пользователь A совершил коммит в своем разветвленном репозитории. Затем пользователь B клонирует репозиторий пользователя A. Человек А вносит некоторые изменения в свое репо. Затем пользователь B хочет извлечь эти изменения в своем репозитории, который он клонировал ранее от пользователя A. Это позволяет пользователю B отправлять изменения пользователя A в удаленное репозиторий. Возможно, этот человек должен внести еще несколько изменений. Человек B также должен иметь возможность извлекать эти изменения и отправлять их в удаленное хранилище.

Мы не уверены, как это сделать с помощью git. Какие-нибудь советы?

Это команды, которые пытается выполнить пользователь B:

 git clone reponame-from-person-a.git
cd reponame-from-person-a
git checkout branch-from-person-a
git commit --amend --author="Person B <person.b@company.com>"
git remote remove origin
git remote add origin reponame-from-person-b.git
git push --set-upstream origin branch-from-person-a
git push -f
 

Затем, когда человек А внес еще несколько изменений, человек Б пробует это:

 git pull
 

Чего мы ожидаем, так это того, что теперь будут извлечены последние изменения от person A. К сожалению, это не так.

Комментарии:

1. Звучит как обычные запросы на извлечение из ветвей функций в главную ветку, где только пользователю B разрешено объединяться. прочитайте это руководство для более глубокого понимания

2.Вам не нужно заменять origin ; у вас может быть несколько удаленных репозиториев.

3. git clone -o person-a reponame-from-person-a.git , за которым следует git remote add person-b reponame-from-person-b.git . В имени нет ничего особенного origin ; это просто имя по умолчанию для удаленного, добавляемого автоматически git clone , и вы можете переопределить его с помощью -o опции.

Ответ №1:

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

  • Пользователь A фиксирует изменения и открывает запрос на извлечение, указывающий, из какой ветви разветвленного репозитория он должен слиться с какой ветвью удаленного репозитория (репозитория пользователя B)
  • Человек B просматривает изменения и объединяет их.

Обратитесь к этому для получения более подробной информации.

Ответ №2:

Поскольку git это распределенный VCS, все это клонирование не требуется после того, как все получили копию.

Например:

 Origin:
      master
        |
A---B---C
 

Персона А разветвляется и создает feature ветку:

 Person A:
  origin/master
        |
A---B---C---D---E
                |
             feature
 

идите вперед и позвольте Человеку А подтолкнуть его к Источнику:

 Origin:
      master
        |
A---B---C---D---E
                |
             feature
 

feature будет находиться на удаленном сервере, но изменения не origin/master внесены, поскольку вы определили, что только пользователю B разрешено вносить изменения master . Существование feature на удаленном сервере вообще не влияет origin/master .

На этом этапе пользователь B, у которого ЕСТЬ полномочия для включения feature в master , может выполнить выборку, чтобы получить обновленную «копию всего», после чего он может выполнить слияние, создав фиксацию слияния F из master и feature :

 Person B:
  origin/master
        |
A---B---C-------F
              /
          D---E
              |
           feature
 

Обратите внимание, что изменения все еще не origin/master внесены. Все изменения пока касаются только филиала местного репо Персоны Б. master :

 Person B:
origin/master  master
        |       |
A---B---C-------F
              /
          D---E
              |
           feature
 

Изменения все еще не origin/master внесены . (Я разбираю это шаг за шагом). Только после того, как пользователь B перейдет master в Origin, он будет обновлен в Origin, что разрешено делать только пользователю B.:

 Origin:
              master
                |
A---B---C-------F
              /
          D---E
              |
           feature
 

На протяжении всего этого процесса отслеживается авторство и приверженность. Любой, кто получит репозиторий на этом этапе, увидит feature , что текст, написанный человеком А, был объединен и включен master человеком В

Ответ №3:

Не уверен в том, как работает ваша команда, но никогда раньше не видел такого рабочего процесса. Пользователь B не должен клонировать репозиторий пользователя A. Я рекомендую вам ознакомиться с этой простой статьей !

Комментарии:

1. Нет ничего плохого в том, чтобы клонировать репозиторий другого человека. На самом деле это предполагаемый вариант использования git — в конце концов, это распределенный vcs. При этом, если у них уже есть копия репо, fetch редактирование было бы более эффективным.

2. В целом согласен, просто имел в виду, что в этом не было необходимости, как вы четко объяснили в своем ответе, 1 за все предоставленные вами подробности!