[EDIT: следующий обновленный вопрос]
Если вы регистрируетесь как пультов ДУ, вы можете увидеть, какие коммиты зарегистрированы на MAIN
и которые зарегистрированы на DERIV
.
$ git clone gitserver:deriv.git
$ cd deriv
$ git remote add main gitserver:main.git
$ git fetch main
Вы должны увидеть ветку main/master
в вашем репо, который покажет вам, какие коммиты являются частью MAIN
и которые не являются.
[/ EDIT]
Короткий ответ:
- да
- нет, но это, вероятно, не имеет значения
- нет, но это, вероятно, не имеет значения
- да
о git журнале:
Я предполагаю, что вы начали свой DERIV
репозиторий запустив git clone MAIN DERIV
, и что вы хотите рабочий процесс, где Вы тянете из MAIN
, но никогда не толкать.
В этом случае DERIV
хранилище «знает» о существовании MAIN
и GIT команд (в основном git fetch
) позволяют интегрировать историю MAIN
«s в DERIV
.
Каждый раз, когда вы запускаете git fetch
(git pull
фактически git fetch
с последующим git merge
), вы будете импортировать MAIN
«s историю в DERIV
, и ее нынешние ветви будут видны и помечены с префиксом origin/
.
- вы можете запустить
git branch -r
, чтобы увидеть список филиалов с MAIN
- вы можете запустить
git log origin/branchname
, чтобы просмотреть историю branchname
на MAIN
- при запуске
git log --decorate
, при каждой фиксации будут отображаться с именами ветвей и теги, указывающие на него
- эти аннотации будут появляться графические инструменты, как
gitk
Затем вы можете определить, какие ветви в ваших проектах DERIV
имеют встроенные изменения от проекта MAIN
.
Если у вас есть филиалы в DERIV
отслеживания ветвей в MAIN
(это поведение по умолчанию master
), git status
сообщит вам, если DERIV
«ветвь s отсутствует коммиты из MAIN
» ветви s.
Если вы в основном с помощью командной строки, две команды очень удобны:
git log --graph --decorate --pretty=oneline --abbrev-commit
git log --graph --decorate --pretty=oneline --abbrev-commit --all
Вы можете add them as shortcuts in your config file.
о том, кто тянул и когда
Вы увидите даты и автор MAIN
«s совершившей, вы увидите, дату и автор слияний в DERIV
» s совершает, когда будут конфликты с MAIN
, Вы не увидите, кто именно втянул историю.
git fetch
фактически (почти) безвредны команда, которая будет импортировать MAIN
«s история и не лезьте с DERIV
ветвей (что будет сделать, это добавить кучу коммитов в репозиторий, и переместить все origin/*
ветви, импортируются).
тянуть против вишневого выбрать
легче отслеживать различия между ветвями головы (git
имеет этот внутренний механизм для отслеживания и объединения ветви), чем пытаться добиться того же результата вручную (например, : используя cherry-pick
и rebase
, и попытайтесь отследить вручную, что фиксации были перенесены, а какие нет).
Что еще?
git fetch/git merge/git pull
определенно способ пойти, чтобы сохранить два хранилища в синхронизации. Что вам нужно, это набор правил для филиалов.
Может быть, вы заинтересованы только в некоторых отдельных отраслях MAIN
(master
, release
, ...), а не в остальных (dev
, test
, tmp
...): вы можете настроить DERIV
хранилище для импорта только некоторые по умолчанию (details here).
Удобно иметь локальные филиалы, отражающие удаленные ветви, но, возможно, вы не хотите, чтобы DERIV:master
был «жестко связан» с MAIN:master
.
Если вы хотите отменить связь master
и origin/master
, вы можете отредактировать файл .git/config
и удалить раздел [branch "master"]
.
Если вы хотите создать локальную ветвь, которая отслеживает удаленную ветку с другим именем, вы можете запустить:
git branch main/v10 --track origin/v10
main/v10
будет местный филиал, который отслеживает удаленный v10
ветвь.
Заключение
мерзавец ответ редко бывает полной без указания на The Book. Потратьте время, чтобы прочитать его, он имеет очень высокое соотношение relevant explanation/line of text
. Chapter 3 касается разветвления и слияния.
Итак, MAIN и DERIV - это разные ветви одного и того же проекта, верно? То есть они принадлежат к одному репозиторию, даже если вы работаете с ними на разных машинах. – Shahbaz