2013-12-03 2 views
0

Я довольно новичок в git и не совсем уверен, как это задавать. Моя работа по-прежнему использует CVS, и я начинаю настаивать на том, чтобы отодвинуть нас от нее, однако у нас есть собственный сервер сборки, который тегирует cvs-проверки с определенным тегом на основе последней проверенной версии каждого класса java, как определено нашим отслеживателем задач система. Затем он проверяет каждый файл на основе тега. Это позволяет нам проверить версию проекта, исходя из того, какую задачу мы отметили для выпуска. Мне любопытно, возможно ли что-то подобное в git, и если да, то как это будет сделано. Спасибо за указатели. Я прочитал книгу pro git и до сих пор не понял, возможно ли это.Есть ли способ указать теги на файл и проверить их?

+0

Если вы используете инструмент репо для управления проектами git, вы также можете использовать файлы с версиями-манифеста. Yuo хочет это для одного репо или нескольких репозиций, которые управляются с использованием файлов манифеста (.xml)? – mrutyunjay

+0

Было бы много. На самом деле сотни. –

+0

Итак, вы используете инструмент репо для управления им? – mrutyunjay

ответ

3

Метки в файле: no. Выезд по тегу: да.

Более конкретно, тег git, это только другой способ указать конкретную фиксацию. Каждая фиксация имеет «истинное имя», одно из этих 40-значных значений SHA-1, таких как 676699a0e0cdfd97521f3524c763222f1c30a094. Эти истинные имена не полезны для людей, поэтому мы даем им значащие имена, либо маркируя кончик ветки (например, master), а затем ссылаясь на фиксацию по ее расстоянию от ответвления (например, master~3 будет " третья фиксация назад от кончика ") или более статическим именем.

Переменные названия ветвей перемещаются - в конце концов, это их целая точка; имея ветвь с именем master, а другая с именем develop не привела бы нас никуда, если бы мы не смогли добавить фиксации к develop, а затем объединить их обратно в master. Поэтому нам также нужны «не движущиеся имена», и это теги.

Чтобы проверить с помощью тега, просто сделать:

git checkout tagname

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

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


Кстати, как пользователь CVS, вы можете спросить, как вы можете проверить тег версии «v1.3» файла A и использовать его с тегом версии «v2.7» файла B. Вы можете сделать это в мерзавце: начните, проверяя нужный тег для «всех файлов» (скажем v2.7 для всего), а затем извлечь один файл, который вы хотите вернуть:

git checkout v2.7 
git checkout v1.3 -- fileA 

You теперь есть v2.7 «всего», кроме файлаA. Если эта комбинация полезна для какой-то причины, хотя, философия мерзавца не «делает особый способ проверить это», а «теперь делает коммит из этого, и дать ему имя»:

# test test test, yes, this is what we need for Customer X 
git status # make sure we're ready to commit 
git commit -m "special version for customer X" 
git tag customerX 

Теперь у вас есть тег, который вы можете использовать для обозначения «v2.7 всего, кроме v1.3 файлаA».Это фиксация, поэтому она является постоянной, если у нее есть имя (и мы просто дали ее один, customerX).

+0

Большое спасибо. Ваше объяснение репликации функций CVS может работать. Я дам то, что вы предложили попробовать! –

Смежные вопросы