考虑一个SVN存储库,它具有一个具有重要生产重要性的文件:
.
├── Makefile
├── README
├── config
│ └── system_configurations
│ └── IMPORTANT.conf
....
开发人员经常在本地更改IMPORTANT.conf
以进行测试,但不想意外提交。{p}
有没有办法保护这个文件,所以提交它会显示某种警告或需要一些特殊的命令行参数?
我知道有一些架构解决方案(例如,在本地使用LOCAL_IMPORTANT.conf
,符号链接等) - 我正在寻找SVN领域的解决方案。
答案 0 :(得分:3)
也许使用SVN锁定机制?
http://tortoisesvn.net/docs/nightly/TortoiseSVN_en/tsvn-dug-locking.html
这可能无法提供足够的保护,因为您可以从其他用户“窃取”锁定,但它会阻止用户对特定文件进行更改,直到他们窃取您的锁定。
答案 1 :(得分:1)
我找到了一种方法,您可以将IMPORTANT.conf完全从SVN中删除,并让CI服务器将其批准的一个从其他位置复制到位 - 例如IMPORTANT_Dev.conf,IMPORTANT_Prod.conf等。< / p>
从技术上讲,你可以做一个post-commit钩子或预提交钩子,它会解析IMPORTANT.conf的提交细节,并且可以使用dev或者提交失败,但使用源代码管理工具进行配置管理似乎有点过头了。
答案 2 :(得分:1)
也许这不是最简单的解决方案,但绝对可配置且通用:
svn hook(在这种情况下是预提交钩子)
您可以自由使用不同的脚本语言,并且可以使用预定义的提交注释来防止意外更改,例如:
(伪代码)
if(affected(important_file) && !commmentContains("IMPORTANT_FILE_CHANGE")) {
return false;
}
您可以在Google上找到很多文章,但这里有一个例子:
http://wordaligned.org/articles/a-subversion-pre-commit-hook
答案 3 :(得分:1)
有很多可能的解决方案。我赞成锁定(如Khoi所述)。在关键文件上设置svn:needs-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
答案 4 :(得分: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}'