2010-05-26 2 views
7

В ClearCase злой двойник возникает, когда два файла находятся с одинаковым именем в двух разных версиях каталога, а если идентификаторы OID элементов различны, но имена одинаковы.Есть ли у ЖКТ злые двойные проблемы?

В GIT идентификатор SHA1 всегда уникален, и файл с тем же именем всегда имеет разные идентификаторы SHA1.

У нас нет понятия злых близнецов, но есть вероятные случаи, когда есть шанс для 2 или более разработчиков, создающих файл с различным содержимым с тем же именем файла в том же каталоге. Во время слияния, когда оба файла совершенно разные, есть вероятность, что разработчики оставят свои изменения в одиночестве и оставят другие изменения, приводящие к потере кода.

Может ли кто-нибудь сообщить мне, будут ли проблемы в GIT, подобные ClearCase или sine, каждый идентификатор SHA1 уникален, в GIT не будет никаких проблем с Evil twin.

+0

Ваш профиль говорит: «ClearCase Admin Research on GIT»? Я делаю то же самое! ;) – VonC

+0

:) Я был в ClearCase последние 3,5 года, и теперь мы переходим от CC к GIT. Поэтому я тестировал различные варианты в GIT и проверял, происходят ли проблемы в CC в GIt или нет. И Von, ваши ответы на большинство вопросов были действительно полезны, благодаря тонне. –

+0

«Теперь мы переходим из CC в GIT« Вам так повезло. Я тоже пытаюсь прокрасться в мою компанию. После более чем 8 лет ClearCase и Subversion (а иногда и Perforce или CM Synergy) это освежает;) – VonC

ответ

7

Гит делает отслеживание на уровне всего дерева, а не отдельных файлов и каталогов, поэтому у него нет понятия, такого как OID.

При слиянии историй, которые включают несовместимые изменения в файл (например, оба добавили новый файл с различным содержимым), Git создаст конфликт слиянием и остановится, чтобы разрешить пользователю разрешить конфликт или прервать слияние.

Конечно, Git не может заставить пользователя выполнять слияние делать правильные вещи, но, возможно, сложнее полностью игнорировать одну сторону конфликта. В Git конфликт будет находиться в самом файле, а не в каталоге, в котором хранится файл. Другими словами, конфликт будет касаться содержимого файла, вместо которого OID должен быть связан в каталоге.Разумеется, в зависимости от используемого инструмента пользователь все равно может просто нажать «встать на сторону во всех конфликтах», но Git все равно не волнует (хотя шефу ленивого халата и коллегам может быть очень много!).

0

О, злые двойные ошибки, которые меня возвращают. Нет, у вас не должно быть таких ошибок в git. Git фактически не отслеживает весь файл так, как он отслеживает фрагменты файлов.

+0

Git действительно отслеживает весь файл (в представлении данных репозитория). Однако инструменты, созданные на репозитории, могут появляться так, как будто они отслеживают фрагменты (если они предпочитают). –

+1

Посмотрите на книгу сообщества git (http://book.git-scm.com/1_the_git_object_model.html) или Pro Git (http://progit.org/book/ch9-2.html), чтобы узнать, что Грег говоря о. Git действительно отслеживает целые файлы или, если хотите, содержимое целых файлов. – Cascabel

3

Нет, но есть detached head. Извините, не смог с собой поделать :)

Что произойдет, так это то, что файл столкнется с конфликтом, когда второй разработчик вытащит перед тем, как нажать. Когда файлы полностью разные, будет очевидно кровотечение, что у них должны быть разные имена файлов. Затем второй разработчик сделает что-то (например, переименует его файл, чтобы не было конфликта).

3

Да, есть какое-то «злые» операции в Git, но не по той же причине, чем evil twins of ClearCase:

Они называется evil merge:

совмещенный, что вносит изменения которые не отображаются ни в одном из родителей.

I.e: помещаем вещи в код, который никто никогда не просил быть там, названный 'evil merge', потому что это сложный угловой случай для «git-вины», который нужно решить при аннотации файла.
Эти слияния обычно связаны с semantic conflict между двумя версиями сливается (а не просто текстовым конфликтом).
Побочным эффектом будет то, что, вместо того, добавление, удаление или изменение линии изменилось, вы в конечном итоге с обе линии (из двух версий присоединяемых) в результате слияния ...

+0

Ну, как я прокомментировал [там] (http://stackoverflow.com/q/1461909/85371), это не столько феномен Git; скорее недобросовестный способ работать с Гит. У Git есть много возможностей, чтобы позволить вам делать то, что чаще всего вам не нужно! – sehe