我在尝试提交到svn存储库时遇到此错误:
svn: MKACTIVITY of '/svn/Demo/!svn/act/e2e65cfa-...4165f': 403 Forbidden (http://svn....com:8088)
Run Code Online (Sandbox Code Playgroud)
知道为什么吗?我google了很多,但找不到适合我的解决方案.
假设您将代码更新为修订版10,该版本已损坏.你想回到修订版9,处理代码并等到有人修复构建:
svn merge -rHEAD:9 .
Run Code Online (Sandbox Code Playgroud)
但它不起作用,为什么?
我在Joel的软件上读到:
使用分布式版本控制,分布式部分实际上不是最有趣的部分.
有趣的是,这些系统考虑的是变化,而不是版本.
在HgInit:
当我们必须合并时,Subversion会尝试查看两个版本 - 我的修改后的代码和修改过的代码 - 它会尝试猜测如何在一个大的邪恶混乱中将它们粉碎在一起.它通常会失败,产生并非真正冲突的"合并冲突"的页面和页面,只是Subversion无法弄清楚我们做了什么的地方.
相比之下,当我们在Mercurial中单独工作时,Mercurial正忙着保留一系列变更集.因此,当我们想要将我们的代码合并在一起时,Mercurial实际上有更多的信息:它知道我们每个人都改变了什么并且可以重新应用这些更改,而不仅仅是查看最终产品并试图猜测如何放置它一起.
通过查看SVN的存储库文件夹,我的印象是Subversion将每个修订版维护为变更集.据我所知,Hg正在使用变更集和快照,而Git纯粹使用快照来存储数据.
如果我的假设是正确的,那么必须有其他方法使DVCS中的合并变得容易.那些是什么?
*更新:
我有一个脚本,我在其中添加所有新文件,然后使用以下行将我的工作副本提交到我的存储库:
svn status | grep ^\? | awk '{print $2}' | xargs svn add
Run Code Online (Sandbox Code Playgroud)
我现在想添加一行从存储库中删除我工作副本中的所有已删除文件.换句话说,我不能逐个指定它们,我需要用svn状态检测它们然后自动删除它们.但是这条线不起作用.
svn status | grep ^\! | awk '{print $2}' | xargs svn --force delete
Run Code Online (Sandbox Code Playgroud)
如你所见,我已经取代了
" ?"与" !"和
" add"与" --force delete"
你能告诉我它为什么不起作用吗?
PS.我知道这是一个危险的程序.我已经讨论了所有这些.谢谢
谢谢
更新到Mac OSX Lion后,我发现我无法使用Subclipse.我一直收到这个错误:
无法加载默认的SVN客户端
有关如何解决此问题的任何想法?
我正在使用Eclipse Indigo.
我对include/exclude行话感到困惑,而我的实际SVN客户端似乎没有(或者我一直无法轻易找到)一个简单的选项来添加或删除某种类型的文件以进行版本控制.
比方说,我已经添加了整个Visual Studio文件夹,包括其解决方案,项目,调试文件等,但我只想对实际的源文件进行版本控制.最简单的方法是什么?
我有一个文件夹,是我的工作副本.如何从此文件夹中删除所有SVN功能?我有理由这样做,不知何故,我的主文件夹包含我所有工作的网站副本,不知何故已经变成了一个工作副本本身,所以我有一个工作副本本身.
那么,是否有一种从文件夹中删除版本控制的简单方法?
假设您在subversion控件下有一个目录,其中包含一些文件和大量子目录,如下所示:
file1.txt
file2.txt
file3.txt
dir1/
dir2/
dir3/
dir4/
:
dirXX/
Run Code Online (Sandbox Code Playgroud)
现在你需要文件和一些目录,但不是全部.这可以通过SVN完成.只是使结账非递归:
svn checkout -N <URL>
Run Code Online (Sandbox Code Playgroud)
这只检出第一个目录和里面的文件.没有包含子目录.即使你进入checkout目录并运行" svn up",它只会更新之前检出的文件,它不会添加目录.您现在可以通过显式更新这些目录来有选择地添加所需的目录.例如,如果您只需要dir2和dir4,则可以进入结帐目录并执行
svn up dir2
svn up dir4
Run Code Online (Sandbox Code Playgroud)
如果您svn up将来运行通用" ",它将只更新文件和那两个目录,它不会添加任何其他目录.
现在的问题是:如果我以后再决定我不再需要dir2怎么办?我怎么摆脱它?似乎没有办法这样做,除了删除整个结帐并从头开始.
当你刚删除dir2时,下一个" svn up"将把它带回来,因为" svn status"当然显示它现在缺失("!"在它的名字前面).运行" svn remove"当然会将其删除,但在下一次提交时,它也会将其从存储库中删除,这不会发生.
即使是SVN 1.5的新稀疏目录("浅签出")功能也没用:
Subversion 1.5的浅层检查实现很好,但不支持一些有趣的行为.首先,您无法取消望远镜查看工作副本项目.在无限深度工作副本中运行svn update --set-depth empty将不会丢弃除最顶层目录之外的所有内容 - 它只会出错.
- http://svnbook.red-bean.com/en/1.5/svn.advanced.sparsedirs.html
这对SVN来说完全不可能吗?有没有人想出一个聪明的工作?
只需创建checkout目录(没有SVN),然后直接从存储库中检出单个子目录作为该目录的子目录将适用于目录:现在每个目录都是自己的结帐,可以更新,一旦不再需要,你可以删除它.但是,我如何获取文件(例如file1.txt)?SVN不允许签出单个文件,只能签出整个目录.
我目前正将SVN服务器从家用服务器移动到远程服务器,以便我可以更轻松地从其他位置访问它.我的远程服务器没有备份,所以我想定期备份到我的家庭服务器.
远程服务器是Windows 2003服务器.家庭服务器是Windows Home Server.
做这个的最好方式是什么?我可以让我的家庭服务器每晚都能获得远程服务器的转储吗?带宽不是一个重要的考虑因素,但如果我可以将任何新的签到复制到我的家庭服务器上的SVN服务器那么没问题.
欢迎任何建议.
要将SVN中的特定文件夹恢复到以前的状态,我目前使用以下内容:
svn rm folder
svn commit -m 'removed folder to revert to previous version'
svn co http://pathto/repo/folder@268
cd folder
rm -rf .svn //recursively if many folders
svn add folder
svn commit -am 'reverted to the previous version'
Run Code Online (Sandbox Code Playgroud)
对于什么应该是一个相当常见的用例来说似乎太麻烦了.我一定是做错了.你怎么能这样做?