惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

酷 壳 – CoolShell
酷 壳 – CoolShell
H
Hacker News: Front Page
P
Palo Alto Networks Blog
T
ThreatConnect
Apple Machine Learning Research
Apple Machine Learning Research
博客园_首页
T
True Tiger Recordings
P
Privacy & Cybersecurity Law Blog
B
Blog
IT之家
IT之家
Last Week in AI
Last Week in AI
F
Full Disclosure
Hacker News: Ask HN
Hacker News: Ask HN
C
Comments on: Blog
Microsoft Azure Blog
Microsoft Azure Blog
C
Cybersecurity and Infrastructure Security Agency CISA
Microsoft Security Blog
Microsoft Security Blog
博客园 - 【当耐特】
N
News and Events Feed by Topic
NISL@THU
NISL@THU
腾讯CDC
雷峰网
雷峰网
Security Latest
Security Latest
李成银的技术随笔
M
Microsoft Research Blog - Microsoft Research
L
LangChain Blog
L
Lohrmann on Cybersecurity
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
C
Check Point Blog
Y
Y Combinator Blog
Recent Announcements
Recent Announcements
博客园 - Franky
N
News | PayPal Newsroom
V
V2EX
A
About on SuperTechFans
The Register - Security
The Register - Security
月光博客
月光博客
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Google Online Security Blog
Google Online Security Blog
MyScale Blog
MyScale Blog
Cisco Talos Blog
Cisco Talos Blog
Vercel News
Vercel News
WordPress大学
WordPress大学
C
Cyber Attacks, Cyber Crime and Cyber Security
The Hacker News
The Hacker News
IntelliJ IDEA : IntelliJ IDEA – the Leading IDE for Professional Development in Java and Kotlin | The JetBrains Blog
IntelliJ IDEA : IntelliJ IDEA – the Leading IDE for Professional Development in Java and Kotlin | The JetBrains Blog
爱范儿
爱范儿
A
Arctic Wolf
L
LINUX DO - 最新话题
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More

博客园 - NetCobra

近况 CSDN双雄——universee(太极语言)和Sinox(汉澳操作系统) The Netron project down, Netron Reloaded... 推荐一个开源项目和一个免费工具 Windows平台下使用Active Directory对Subversion进行权限控制(非完美解决方案) DotNet 项目中链接文件的用处 看看美国的烂公司是怎么样的烂法 SQLite 不能加密? - NetCobra 对软件的多语言化方法的一点看法 最近工作情况 关于 zjsflyer 对 JPgraph 中文显示乱码问题的回复 - NetCobra [旧文]来自 Borcon2003 中国开发者大会的现场报道 [问题]DotNet 项目如何实现在构建时 Build 号自动增加? 每日构建中的两个问题 如何防止 Wiki 被恶意篡改? [翻译] NMock 两分钟教程 [翻译] NMock 简介 头疼的问题:NAnt 的 cvs-checkout 任务无法执行 可以下载 Delphi 2005 试用版了
让TortoiseSVN使用类似TortoiseCVS的文件冲突解决方式
NetCobra · 2006-07-23 · via 博客园 - NetCobra

问题的产生:
对于采用Copy-Modified-Merge方式的版本控制系统,冲突的管理和解决是非常重要的。
目前公司的一个项目由于系统的版本升级,系统的源代码在开发过程中有大量的文件重命名操作,原有的CVS不支持文件重命名,每次都需要删除原有文件,再重新导入新的文件,导致文件更改历史丢失;为了解决这个问题,我们把版本控制工具从CVS改成了Subversion,客户端从TortoiseCVS改为了TortoiseSVN;由于TortoiseCVS和TortoiseSVN的使用极为相似,因此转移后大家在使用上并没有遇到什么问题——除了对文件冲突的解决方式;

问题的详细分析:
在文件的合并发生冲突时,冲突文件主要有以下几个版本:
Base:自己的工作复本中该文件的原始版本
Mine:自己的工作文件
Theirs:版本库中的最新文件
Merged:在TortoiseSVN中自动合并后的文件,在该文件中,用如下方式标识了文件中发生冲突的部分(这种方式似乎是Unix世界的通用方式?):
<<<<<<< filename
    your changes
=======
    code merged from repository
>>>>>>> revision

在 TortoiseCVS 中,对冲突文件的合并是用Mine和Theirs进行比较进行的,合并后的文件即作为工作复本中冲突已解决的新文件;而在TortoiseSVN中,对于冲突的文件(比如ConflictFile.txt),会自动生成以下几个文件:

ConflictFile.txt.mine(自己的工作复本Mine)
ConflictFile.txt.rBaseRevision(原始版本Base)
ConflictFile.txt.rNewRevision(版本库中的新版本Theirs)
ConflictFile.txt(合并后的文件Merged)

TortoiseSVN 的冲突解决需要对以上文件进行比较合并,最终将所有的修改都合并到Merged版本中,然后将冲突设置为已解决;但是由于工作复本、版本库的新版本以及合并的目标分别存储在三个文件中,因此TortoiseSVN的冲突解决就需要使用支持三向比较(3-Ways)的比较/合并工具,比如TortoiseSVN内置的TortoiseMerge(免费),或者Araxis Merge(收费);原来我们在TortoiseCVS中使用的Beyond Compare就无法使用了,因为BC只支持对两个文件进行比较,在TortoiseSVN中使用Beyond Compare作为合并工具的话,就还需要手工作很多工作——大家就是对这一点非常不适应。

问题解决方案:
1.编写如下的批处理文件(注意将Beyond Comare的路径改为实际的路径):
"D:\Applications\DevTools\BeyondCompare2\BC2.exe" %1 %2
Del %3
Del %4
Del %2
Copy %1 %3
Del %1

2.在TortoiseSVN的Setting中选择合并工具(Merge Tool)页面,设置使用外部合并工具(External),在命令行中设置外部合并工具的命令行如下:
"D:\Applications\DevTools\TortoiseSVN\TSVNMerge.bat" %mine %theirs %merged %base

3.在使用TortoiseSVN编辑冲突文件时,系统会自动打开冲突文件的Mine版本和Theirs版本进行比较合并,用户将所有的修改合并到Mine版本中,当手工编辑冲突完成后,将自动用合并后的Mine版本替代Merged版本,并删除其他文件;这时使用TortoiseSVN的“标识为已解决”,即可进行提交。

此方法可以使用任何支持双向文件比较/合并的工具。

解决方案存在的问题:
这不是一个完美的解决方案,由于使用的是功能有限的批处理文件,因此存在以下问题:
1.无法判断用户是否进行了合并操作,如果没有进行合并操作,也会进行后面的删除和复制操作;
2.有时候会发生复制时提示Merged文件无法修改的情况,这可能是由于比较工具尚未完全退出造成的;

上面的问题可以通过自己编写程序解决,第一个问题通过用文件监视器监视Mine文件来判断是否进行了修改;第二个文件可以通过监视比较工具的进程进行判断。