Теория (и терминология) позади Управления исходным кодом

В принципе, == сравнивает, если два объекта имеют одну и ту же ссылку в куче, поэтому, если две ссылки не связаны с одним и тем же объектом, это сравнение будет ложным.

equals() - метод унаследованный от класса Object. Этот метод по умолчанию сравнивает, если два объекта имеют одинаковое рефери. Это означает:

object1.equals(object2) & lt; => object1 == object2

Однако, если вы хотите установить равенство между двумя объектами того же класса, вы должны переопределить этот метод. Также очень важно переопределить метод hashCode(), если вы переопределили equals().

Реализация hashCode() при установлении равенства является частью Контракта объектов Java. Если вы работаете с коллекциями, а вы не реализовали hashCode(), могут возникнуть Strange Bad Things:

HashMap<Cat, String> cats = new HashMap<>();
Cat cat = new Cat("molly");
cats.put(cat, "This is a cool cat");
System.out.println(cats.get(new Cat("molly"));

null будет напечатано после выполнения предыдущего кода, если вы еще не реализовали hashCode().

7
задан Ryan Fox 17 August 2008 в 02:05
поделиться

5 ответов

Я рекомендую проверить следование из Eric Sink:

http://www.ericsink.com/scm/source_control.html

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

6
ответ дан 6 December 2019 в 10:05
поделиться

Думайте об управлении исходным кодом как о гигантской кнопке "Undo" для Вашего исходного кода. Каждый раз, когда Вы регистрируетесь, Вы добавляете точку, к которой можно откатывать. Даже если Вы не используете ветвление/слияние, одна только эта функция может быть очень ценной.

Кроме того, при наличии одной 'авторитетной' версии управления исходным кодом, становится намного легче создать резервную копию.

Централизованный по сравнению с распределенным... различие действительно, что в распределенном, существует не обязательно одна 'авторитетная' версия управления исходным кодом, хотя у людей практики обычно все еще имеют основное дерево.

Большое преимущество для распределенного управления исходным кодом является двукратным:

  1. При использовании распределенного управления исходным кодом у Вас есть целое исходное дерево на Вашей локальной машине. Можно фиксировать, создать ответвления и работать в значительной степени, как будто Вы были совершенно одними, и затем когда Вы готовы увеличить свои изменения, можно продвинуть их от машины до основной копии. Если Вы работаете "офлайн" много, это может быть огромным преимуществом.

  2. Вы не должны спрашивать ничье разрешение стать дистрибьютором управления исходным кодом. Если человек A выполняет проект, но человек B и C хотят внести изменения и совместно использовать те изменения друг с другом, это становится намного легче с распределенным управлением исходным кодом.

8
ответ дан 6 December 2019 в 10:05
поделиться

Вот две статьи, которые очень полезны для понимания основ. Вне того, чтобы быть информативным, компания Приемника продает большой продукт управления исходным кодом под названием Хранилище, которое свободно для отдельных пользователей (я не аффилирован всегда с той компанией).

http://www.ericsink.com/scm/source_control.html

http://betterexplained.com/articles/a-visual-guide-to-version-control/

Информация о хранилище по www.vault.com.

3
ответ дан 6 December 2019 в 10:05
поделиться

Даже если Вы не переходите, можно найти полезным использовать теги для маркировки выпусков.

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

При метках выпуска Вы могли бы проверить рабочую копию его и использовать его для исправления ошибки.

Затем Вы могли бы принять решение создать ответвление в теге и проверить исправление ошибки в нем. Тем путем можно исправить больше ошибок на том выпуске, в то время как Вы продолжаете обновлять соединительную линию. Можно также объединить те меры в соединительную линию так, чтобы они присутствовали в следующем выпуске.

1
ответ дан 6 December 2019 в 10:05
поделиться

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

Папка тегов берет его один шаг вперед и позволяет Вам "отмечать свой код контрольной точкой" в определенные моменты вовремя. Например, при выпуске новой сборки или иногда даже когда Вы просто делаете новую сборку, Вы "отмечаете" копию в эту папку. Это просто позволяет Вам знать точно, на что Ваш код был похож в то время.

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

Так или иначе это - всего один аспект того, как настроить Вашу систему, но я думаю, уделяя некоторое внимание этой структуре, важно.

1
ответ дан 6 December 2019 в 10:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: