Невозможно синхронизировать 2 репозитория, раздельно автоматизировавшись на 100% с любым решением, которое вы выберете (для достижения автоматической синхронизации вы должны либо выполнить синхронизацию в кратчайшие сроки или возможность блокировать нажатие на git или зарегистрироваться в TFVC, когда одна из 2 команд начнет синхронизацию).
Итак, у вас всегда будут конфликты, которые вы должны объединить вручную. Вы можете найти рабочий процесс, который предотвратит большинство из них, но никогда не решит все случаи, и эти оставшиеся случаи будут очень трудно решить ...
В любом случае, вы могли бы почти достичь того, чего хотите (это зависит от ваших ожиданий: вам нужна поддержка ветвления --hard -, ...) с git-tfs (я включил в git-tfs все необходимое для этого, но никогда не использовался в производстве), но это немного сложно.
Вам необходимо клонировать репозиторий TFS в bare
хранилище:
git tfs clone https://server/tfs/TeamCollection $/project/trunk --bare --with-branches
, то вам необходимо написать в вашем post-receive
крючке этого bare
того хранилища подобного (я не помню, если он работает) :
branch=$(git rev-parse --symbolic --abbrev-ref $1)
if [ "master" == "$branch" ]; then
branch="default"
fi
git tfs rcheckin --bare -i $branch
при том, что каждый раз, когда кто-то толчок в репозиторий, коммиты будут проверены в в TFS.
Для большего комфорта (в противном случае они всегда будут иметь скучные конфликты для решения, когда они попытаются нажать), вы можете синхронизировать репозиторий git с сервером TFS с запланированной задачей с помощью команды (таким образом, они будут знать о новых коммитах раньше):
git tfs fetch --all
Примечание: Я не помню, если эта команда может быть использована в bare
хранилище (теперь, когда я думаю об этом, я не думаю так). В противном случае вам придется использовать вместо этого git tfs fetch -b=myGitBranch -i tfsRemote
для каждой существующей ветки :(
Но я уверен, что они никогда не смогут работать с ветвями, которые еще не были созданы в tfs :(Инструмент git-tfs действительно не способен чтобы автоматически создавать ветку TFVC из истории git. Технически это возможно, но я не думаю, но никогда не разрабатывался (потому что git-tfs - это больше, чем инструмент, чтобы убежать от TFVC, чем инструмент для проверки вашего развития в нем ...)
И некоторые другие вещи могут быть трудными или невозможными ...
Надеюсь, это поможет.
PS:
- это тяжелая работа, вы пытаетесь сделать для кого-то не используется для GIT-ТПО ... и что-то я не рекомендую делать.
- Я настоятельно рекомендую идти тем же путем, что и Microsoft, и переносить все на git (даже если он находится на сервере TFS или VSTS, если это необходимо), таким образом синхронизация будет намного проще (даже если она не 100% автоматическая;)). Я сделал хороший документ о том, как перейти от TFVC: https://github.com/git-tfs/git-tfs/blob/master/doc/usecases/migrate_tfs_to_git.md
- Попробуйте убедить ваше предприятие, что каждая команда должна выбирать и осваивать свои инструменты, а не накладывать некоторые варианты.
Внешние стороны будут создавать филиалы в репозитории GIT. Если я правильно вас понимаю, это невозможно решить.Проблема, которую я вижу, заключается в том, что репозиторий GIT не сможет получить доступ к нашему серверу TFS, поскольку он находится внутри интрасети. Я хочу, чтобы все инициировалось и координировалось с сервера TFS. – magol
Можно ли по-другому решить проблему, которая работает лучше для нас? – magol
Нет, с TFS нет решения с тем, что вы просите. Единственное решение - перейти от TFSVC (использовать репозиторий git, если у вас есть TFS2013 или поставщик репозитория git) и синхронизировать репозитории 2 git. Никаких других решений ... – Philippe