保护文件免遭意外提交

时间:2012-04-29 07:54:27

标签: svn

考虑一个SVN存储库,它具有一个具有重要生产重要性的文件:

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

开发人员经常在本地更改IMPORTANT.conf以进行测试,但不想意外提交。{p}

有没有办法保护这个文件,所以提交它会显示某种警告或需要一些特殊的命令行参数?

我知道有一些架构解决方案(例如,在本地使用LOCAL_IMPORTANT.conf,符号链接等) - 我正在寻找SVN领域的解决方案。

5 个答案:

答案 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}'