我是使用 SVN 的新手。我们与 3 人一起从事嵌入式项目。当有人在开发 ac 库时,其他人正在开发另一个库。有一个 main.c,我们也在其中编写了一些东西。我的问题是我们如何管理 SVN 中的 main.c 等公共文件?我们需要这样做,因为我们都在同一时间一起工作。
3 回答
当您对文件进行更改并准备好将这些更改提交回源代码控制时,您将它们提交到 SVN 服务器。当其他人也对该文件进行了更改并且他们尝试做同样的事情时,服务器会告诉他们有一个新版本,他们需要先更新。
更新后,SVN 将为它们合并更改。如果合并不容易,则需要用户解决冲突(可能在某种合并工具中,我认为它是可定制的)。一旦解决了这些冲突,该人也可以将他们的更改提交到该文件。
服务器始终拥有源代码的“当前版本”。并且在提交到服务器时,开发人员有责任确保他们已经使用当前版本测试了他们的更改并且没有破坏它。您可以使用持续集成工具和技术来自动化其中的大部分内容,尤其是在您对代码进行自动化测试的情况下。为了降低合并的复杂性,建议提交许多小更改而不是少量大更改。
这是我们的工具已经可以涵盖的内容。有两件事需要注意。
- 合并工具
这是一个自动合并更改的工具。通常,在同一文件上进行两次编辑的合并不会出现任何问题,因为编辑涉及代码的不同区域。
- 冲突
当合并工具发现两个文件都更改了相同的代码行时会发生冲突(它通常对此也非常聪明,因此它不会对空行感到生气)SVN会通知您这个问题并且您使用的客户端甚至可能弹出合并工具向您显示问题。您将不得不手动解决您的冲突,但通过一点沟通,这很少会成为问题。
请记住在开始处理新内容之前执行更新以获取其他所有人的更改,否则您最终可能会遇到完全可以避免的冲突。
作为记录,我使用 TortoiseSVN 和 WinMerge 作为我的客户端和合并工具。
希望有帮助!
让我们从头开始:
- 在服务器机器上安装一个颠覆服务器
- 设置存储库
- 为用户设置访问权限
- 每个用户在他的工作站上安装一个颠覆客户端
将您的项目导入存储库(初始提交)
svn import <project-dir> <repo-url>/trunk -m="initial commit MyProject"
每个用户现在签出一个
working copy
svn checkout --revision HEAD --depth infinity --force <repo-url>/trunk <project-dir>
现在您和您的朋友可以开始各自处理他的working copy
. 完成commit
对存储库的更改后。
svn commit <project-dir | some-file> -m "some comment: fixed bug or somthing"
要获取您朋友的更改,请执行update
命令。
svn update --revision HEAD <project-dir | some-file>
最后,这里有一些您可能会觉得有趣的链接: