Какая-либо система управления версиями имеет “персистентный локальный, только изменяют” функцию?

Вы могли бы хотеть попробовать cdecl или C++ decl .

% c++decl
c++decl> declare i as reference to array 8 of array 12 of int
int (&i)[8][12]
c++decl> explain int (&i)[8][12]
declare i as reference to array 8 of array 12 of int
c++decl> exit
10
задан Greg 26 October 2009 в 16:00
поделиться

9 ответов

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

6
ответ дан 4 December 2019 в 01:57
поделиться

Вы можете игнорировать любой файл конфигурации из системы контроля версий. Это файл .gitignore .

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

log/*

Чтобы игнорировать файл .DS_Store, вы добавляете строку с помощью:

.DS_Store

Затем вы можете обновить файл локально, вы никогда не увидите его в измененных, но незафиксированных файлах. И если вы выполните git add. , он не будет добавлен в коммит.

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

Например, в проекте rails конфигурация моей базы данных выглядит так:

production:
 database: project_database
 username: database_user
 password: <%= File.read('path/to/my/password/file').chomp if File.readable? 'path/to/my/password/file' %>

Файл «путь / к / моему / паролю / файлу» не находится в системе контроля версий.
Итак, мой файл конфигурации имеет версии. Но пароль зависит от машины, на которой мы находимся.

Он также имеет то преимущество, что пароли в вашем контроле версий не могут быть прочитаны кем-либо.

1
ответ дан 4 December 2019 в 01:57
поделиться

Это может быть немного более специфичным для Visual Studio, но я предполагаю, что в большинстве IDE будет какая-то похожая функция.

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

  <dataConfiguration configSource="Config\Development\dataConfiguration.config" />
  <connectionStrings configSource="Config\Development\connectionStrings.config" />
  <appSettings configSource="Config\Development\appSettings.config"/>

Затем для каждого файла она была похожа на

<?xml version="1.0" encoding="utf-8" ?>
<dataConfiguration defaultDatabase="defaultDatabase"/>

. После этого я создаю папки для каждой среды Dev / Staging / Prod и т. Д. И использую другой вспомогательный файл конфигурации в каждую папку, чтобы все настройки можно было проверить в TFS. У меня есть настройка проекта веб-развертывания для извлечения соответствующих файлов для каждой конфигурации выпуска. Позже, когда я настрою TFS для управления моими выпусками, этого легко добиться, просто скопировав правильную конфигурацию.

1
ответ дан 4 December 2019 в 01:57
поделиться

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

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

1
ответ дан 4 December 2019 в 01:57
поделиться

Я делаю то же самое на monotone , используя команду распространять .

короче говоря, у меня есть ветка «разработка» и «развернутая» ветка. в развернутой ветке конфигурация имеет несколько других настроек (некоторые каталоги и DEBUG = False). Когда я хочу развернуть, я делаю mtn распространять от разработки до развернутой ветви. затем на сервере я выполняю извлечение и обновление, поэтому рабочая область получает последние изменения из своей ветви, которые включают все новые разработки, но с учетом различий в настройках.

0
ответ дан 4 December 2019 в 01:57
поделиться

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

Я стараюсь сделать все среды как можно более похожими друг на друга. Единственное, что обычно отличается, - это имена входа, а иногда и URL-адреса служб инфраструктуры (БД, брокер сообщений, службы данных предприятия и т. Д.).

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

Пароли и конфигурация для CI и тестовых сред проверяются, поэтому серверы сборки и развертывания могут автоматически запускать системы в тестовые среды.

Пароли для производства никогда не проверяются (что '

0
ответ дан 4 December 2019 в 01:57
поделиться

Вы можете вроде как сделать это с SVN.

Если вы извлечете файл из библиотеки и внесете в него изменения, а затем выполните «обновление», вы получите новая копия файла из библиотеки с внесенными в нее изменениями. Я регулярно использую это для файлов конфигурации.

Это не совсем похоже на то, что вы описываете, потому что каждый раз, когда вы делаете коммит, вам нужно исключить файл конфигурации. Я полагаю, если вы забудете сделать это в какой-то момент, вы обновите репозиторий своими локальными изменениями и причините всем остальным неприятности.

И когда вам действительно нужно изменить «публичную» часть файла конфигурации, у вас есть чтобы сделать отдельную проверку, чтобы можно было отделить "общедоступные" изменения от "локальных".

I ' Я также поддерживаю схемы, подобные описанию Криса Марисика. У меня есть пара веб-приложений, в которых я создал несколько файлов конфигурации, и программа динамически решает, какой из них использовать, в зависимости от среды.

В одном случае файл конфигурации включает пути к внешним файлам, и я работал как с сервером Windows, так и с сервером Linux, поэтому имена путей разные. В итоге я создал «конфигурацию Linux» и «конфигурацию Windows», а затем выбрал, в зависимости от того, в какой ОС я работал.

В другом случае программа при запуске проверяет имя контекста сервлета (это приложение JSP / сервлет), затем ищет файл с именем «WEB-INF / .properties». Если он этого не находит, он загружает имя по умолчанию.

0
ответ дан 4 December 2019 в 01:57
поделиться

Mercurial может добавить локальный файл в .hgignore и, таким образом, быть проигнорированным - тогда он не будет портить ваши измененные файлы или что-то еще.

0
ответ дан 4 December 2019 в 01:57
поделиться

Это выполнимо, если вы можете объединить несколько репозиториев в одно рабочее дерево. Самым простым решением были бы символические ссылки.

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

С несколькими репозиториями вы, безусловно, можете иметь коммиты, которые идут в один репозиторий или другой. Сколько для этого потребуется локальной настройки, зависит от системы VCS. Например, для svn: externals вам нужно будет использовать один и тот же репозиторий file: на каждой машине, но они могут указывать на разные наборы файлов. С символическими ссылками,

0
ответ дан 4 December 2019 в 01:57
поделиться
Другие вопросы по тегам:

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