2012-04-29 3 views
4

Рассмотрим хранилище SVN, который имеет файл с большой производственной важности:защитить файл от случайного совершает

. 
├── Makefile 
├── README 
├── config 
│   └── system_configurations 
│    └── IMPORTANT.conf 
.... 

Разработчики часто менять IMPORTANT.conf локально для целей тестирования, но не хотят, чтобы совершить его случайно.

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

Я знаю, что есть некоторые архитектурные решения (например, используйте LOCAL_IMPORTANT.conf локально, символические ссылки и т. Д.). Я ищу решение из области SVN.

ответ

3

Возможно, используется механизм блокировки SVN?

http://tortoisesvn.net/docs/nightly/TortoiseSVN_en/tsvn-dug-locking.html

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

1

Я нашел бы способ, которым вы могли бы полностью оставить ВАЖНО.conf из SVN, и иметь копию сервера CI, которую он одобрил на месте с другого места - например, IMPORTANT_Dev.conf, IMPORTANT_Prod.conf и т. Д.

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

1

Может быть, это не Простейшее решение, но абсолютно конфигурируемый и вообще:

СВНА крюк (перед фиксацией ловушки в данном случае)
Вы можете использовать различные языки сценариев, и вы можете для предотвращения accidentaly изменений с предопределенным совершившим закомментаренными, как:
(псевдокод)

if(affected(important_file) && !commmentContains("IMPORTANT_FILE_CHANGE")) { 
    return false; 
} 

Вы можете найти много статей о Google, но вот пример:
http://wordaligned.org/articles/a-subversion-pre-commit-hook

1

Существует множество возможных решений. Я бы предпочел блокировку (как упоминал Хой). Установите svn: require-lock на критические файлы, а затем пусть люди явно заблокируют их в редких случаях, которые они действительно должны изменить.

http://svnbook.red-bean.com/en/1.7/svn.advanced.locking.html

Другим решением может быть хотя контролем доступа SVN. Как осуществляется доступ к репозиторию SVN?HTTP и доступ к SVN как разрешить разрешения быть установлен на путях:

http://svnbook.red-bean.com/en/1.7/svn.serverconfig.pathbasedauthz.html

+0

Также SVN: игнорировать слишком, если его один файл/dir http://svnbook.red-bean.com/en/1.1/ch07s02.html – ehime

0

Попробуйте просто игнорируя его

# --------------------------------------------------------------------- 
#  Ignore all the .txt files in the /trunk/Blah/ directory 
# --------------------------------------------------------------------- 

# Go to the directory 
cd trunk/Blah/    # The directory with the files 

# Start editing the properties for the current directory 
svn propedit svn:ignore . # Opens an editor (SVN_EDITOR, EDITOR) 

# Add the following value with a new line, save, and exit: 
*.txt 

# See that things worked 
svn propget svn:ignore . # So you can see the properties 
svn status --no-ignore  # You should see an 'I' next to the ignored files 

# Commit 
svn commit -m "New Ignores" # You must commit the new property change 


# --------------------------------------------------------------------- 
#  Ignore a single file secret.txt in the /trunk/ directory 
# --------------------------------------------------------------------- 

# Go to the directory 
cd trunk/ 

# Add just the single file to the current directories ignore list (like above) 
# Note the dot at the end of the command is important 
svn propset svn:ignore secret.txt . 

# See that things worked 
svn propget svn:ignore . # Notice the single file was added to the list 
svn status --no-ignore  # You should see an 'I' next to the ignored files 

# Commit 
svn commit -m "Its secret" # You must commit the new property change 

Если вы хотите совершить его, используйте

svn changelist ignore-on-commit {file-you-want-to-add} 

И если вы хотите найти файлы, которые не версируются

svn status | grep ^\? | awk '{print $2}' 
Смежные вопросы