`
linkyou66
  • 浏览: 226932 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

python 实现svn批量删除文件功能

 
阅读更多
<p>在linux下开发文件,但是当有代码被删除的时候,有时候忘记立马提交命令到svn服务器删除相应的文件,</p>
<p>但是svn本身没有提供相应的命令来批量删除,为此用python写了一个</p>
<p></p>
<p>import os<br>
if __name__== '__main__':<br>
svnfiles = os.popen("svn ls").readlines()<br>
print svnfiles<br>
localfiles = os.popen("ls").readlines()<br>
print localfiles<br>
svninfo = os.popen("svn info").readlines()<br>
path = svninfo[1][:len(svninfo[1])-1]<br>
for i in range(0,len(svnfiles)-1):<br>
  sourcefile = svnfiles[i][:len(svnfiles[i])-1] <br>
  if sourcefile[len(sourcefile)-1:] == "/":<br>
   sourcefile = sourcefile[:len(sourcefile)-1]<br>
  #print sourcefile<br>
  bDelete = True<br>
  for j in range(0,len(localfiles)-1):<br>
   localfile = localfiles[j][:len(localfiles[j])-1]<br>
   #print localfile<br>
   if sourcefile == localfile:<br>
    bDelete = False<br>
    break<br>
  if bDelete == True:<br>
   optstr = "svn delete %s/%s -m /"/" /n"%(path[5:],sourcefile)<br>
   print optstr<br>
   os.system(optstr)<br>
   os.system("svn up")</p>
<p></p>
<p>删除.svn以脱离svn管理</p>
<p>find ./ -name '.svn' -exec rm -rf {} /;</p>
<p></p>
<p style="color: #006666;"><span style="font-size: medium;"><strong>1、</strong>
将文
件checkout到本地目录</span>
</p>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; font-size: 13px; width: 98%; color: #006666; background-color: #eeeeee;">
<span style="font-size: medium;"><strong><span class="highlight">svn</span>
checkout</strong>
path(path是服务器上的目录)<br>
例如:<span class="highlight">svn</span>
checkout <span class="highlight">svn</span>
://<span style="font-weight: bold;">192.168</span>
.<span style="font-weight: bold;">1.1</span>
/pro/domain<br>
简写:<span class="highlight">svn</span>
co</span>
</div>
<p style="color: #006666;"><span style="font-size: medium;"><strong>2、</strong>
往版
本库中添加新的文件</span>
</p>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; font-size: 13px; width: 98%; color: #006666; background-color: #eeeeee;">
<span style="font-size: medium;"><strong><span class="highlight">svn</span>
</strong>
<strong>add</strong>
file<br>
例如:<span class="highlight">svn</span>
add test.php(添加test.php)<br><span class="highlight">svn</span>
add *.php(添加当前目录下所有的php文件)</span>
</div>
<p style="color: #006666;"><span style="font-size: medium;"><strong>3、</strong>
将改
动的文件提交到版本库</span>
</p>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; font-size: 13px; width: 98%; color: #006666; background-color: #eeeeee;">
<p><span style="font-size: medium;"><strong><span class="highlight">svn</span>
commit</strong>
-m “LogMessage“ <span style="font-weight: bold;">[</span>
-N<span style="font-weight: bold;">]</span>
<span style="font-weight: bold;">[</span>
--no-unlock<span style="font-weight: bold;">]</span>
PATH<img src="http://www.blogjava.net/Images/dot.gif" alt="">
(如果选择了保持锁,就使用–no-unlock开关)<br>

如:<span class="highlight">svn</span>
commit -m “add test file for my
test“ test.php<br>
简写:<span class="highlight">svn</span>
ci</span>
</p>
</div>
<p style="color: #006666;"><span style="font-size: medium;"><strong>4、</strong>
加锁
/解锁</span>
</p>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; font-size: 13px; width: 98%; color: #006666; background-color: #eeeeee;">
<span style="font-size: medium;"><strong><span class="highlight">svn</span>
lock</strong>
-m “LockMessage“ <span style="font-weight: bold;">[</span>
--force<span style="font-weight: bold;">]</span>
PATH<img src="http://www.blogjava.net/Images/dot.gif" alt=""><br>
例如:<span class="highlight">svn</span>
lock -m “lock test file“ test.php<br><strong><span class="highlight">svn</span>
unlock</strong>
PATH</span>
</div>
<p style="color: #006666;"><span style="font-size: medium;"><strong>5、</strong>
更新
到某个版本</span>
</p>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; font-size: 13px; width: 98%; color: #006666; background-color: #eeeeee;">
<span style="font-size: medium;"><strong><span class="highlight">svn</span>
update -r </strong>
m path<br>
例如:<br><span class="highlight">svn</span>
update如果后面没有目录,默认将当前目录以及子目录下的所有文件都更新到最新版本。<br><span class="highlight">svn</span>
update -r 200
test.php(将版本库中的文件test.php还原到版本200)<br><span class="highlight">svn</span>
update test.php(更新,于版本库同步。如果在提交的时候提示过期的话,是因为<strong>冲突,需要先update,修改文件</strong>

然后清除<strong><span class="highlight">svn</span>
resolved</strong>
,最后再提交
commit)<br>
简写:<span class="highlight">svn</span>
up</span>
</div>
<p style="color: #006666;"><span style="font-size: medium;"><strong>6、</strong>
查看
文件或者目录状态</span>
</p>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; font-size: 13px; width: 98%; color: #006666; background-color: #eeeeee;">
<span style="font-size: medium;">1)<strong><span class="highlight">svn</span>
status</strong>
path<img src="http://www.blogjava.net/Images/dot.gif" alt="">
(目录下的文件和子目录的状态,正常状态不显示)<br>
【?:
不在<span class="highlight">svn</span>
的控制中;M:内容被修改;C:发生冲突;A:预定加入到版本库;K:被锁
定】<br>
2)<strong><span class="highlight">svn</span>
status -v</strong>

path<img src="http://www.blogjava.net/Images/dot.gif" alt="">
(显示文件和子目录状
态)<br>
第一列保持相同,第二列显示工作版本号,第三和第四列显示最后一次修改的版本号和修改人。<br>
注:<span class="highlight">svn</span>
status、<span class="highlight">svn</span>

diff和 <span class="highlight">svn</span>
revert这三条命令在没有网络的情况下也可以执行的,原因是<span class="highlight">svn</span>
在本地的.<span class="highlight">svn</span>
中保留了
本地版本的原始拷贝。<br>
简写:<span class="highlight">svn</span>
st</span>
</div>
<p style="color: #006666;"><span style="font-size: medium;"><strong>7、</strong>
删除
文件</span>
</p>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; font-size: 13px; width: 98%; color: #006666; background-color: #eeeeee;">
<span style="font-size: medium;"><strong><span class="highlight">svn</span>
delete</strong>
path -m “delete test fle“<br>

如:<span class="highlight">svn</span>
delete <span class="highlight">svn</span>
://192.168.1.1/pro/domain/test.php
-m “delete test file”<br>
或者直接<span class="highlight">svn</span>
delete
test.php 然后再<span class="highlight">svn</span>
ci -m ‘delete test
file‘,推荐使用这种<br>
简写:<span class="highlight">svn</span>
(del, remove, rm)</span>
</div>
<p style="color: #006666;"><span style="font-size: medium;"><strong>8、</strong>
查看
日志</span>
</p>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; font-size: 13px; width: 98%; color: #006666; background-color: #eeeeee;">
<span style="font-size: medium;"><strong><span class="highlight">svn</span>
log</strong>
path<br>
例如:<span class="highlight">svn</span>
log test.php 显示这个文件的所有修改记录,及其版本号的变化</span>
</div>
<p style="color: #006666;"><span style="font-size: medium;"><strong>9、</strong>
查看
文件详细信息</span>
</p>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; font-size: 13px; width: 98%; color: #006666; background-color: #eeeeee;">
<span style="font-size: medium;"><strong><span class="highlight">svn</span>
info</strong>
path<br>
例如:<span class="highlight">svn</span>
info test.php</span>
</div>
<p style="color: #006666;"><span style="font-size: medium;"><strong>10、</strong>

较差异</span>
</p>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; font-size: 13px; width: 98%; color: #006666; background-color: #eeeeee;">
<span style="font-size: medium;"><strong><span class="highlight">svn</span>
diff</strong>
path(将修改的文件与基础版本比较)<br>
例如:<span class="highlight">svn</span>
diff test.php<br><strong><span class="highlight">svn</span>
diff</strong>
-r m:n path(对版本m和版本n比较差异)<br>

如:<span class="highlight">svn</span>
diff -r 200:201 test.php<br>
简写:<span class="highlight">svn</span>
di</span>
</div>
<p style="color: #006666;"><span style="font-size: medium;"><strong>11、</strong>

两个版本之间的差异合并到当前文件</span>
</p>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; font-size: 13px; width: 98%; color: #006666; background-color: #eeeeee;">
<span style="font-size: medium;"><strong><span class="highlight">svn</span>
merge -r</strong>
m:n path<br>
例如:<span class="highlight">svn</span>
merge -r 200:205
test.php(将版本200与205之间的差异合并到当前文件,但是一般都会产生冲突,需要处理一下)</span>
</div>
<p style="color: #006666;"><span style="font-size: medium;"><strong>12、</strong>
<span class="highlight">SVN</span>
帮助</span>
</p>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; font-size: 13px; width: 98%; color: #006666; background-color: #eeeeee;">
<span style="font-size: medium;"><strong><span class="highlight">svn</span>
help<br><span class="highlight">svn</span>

help ci</strong>
</span>
</div>
<p style="color: #006666;"><span style="font-size: medium;">——————————————————————————</span>
</p>
<p style="color: #006666;"><span style="font-size: medium;">以上是常用命令,下面写几个不经常用的</span>
</p>
<p style="color: #006666;"><span style="font-size: medium;">——————————————————————————</span>
</p>
<p style="color: #006666;"><span style="font-size: medium;"><strong>13、</strong>

本库下的文件和目录列表</span>
</p>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; font-size: 13px; width: 98%; color: #006666; background-color: #eeeeee;">
<span style="font-size: medium;"><strong><span class="highlight">svn</span>
list </strong>
path<br>
显示path目录下的所有属于版本库的文件和
目录<br>
简写:<span class="highlight">svn</span>
ls</span>
</div>
<p style="color: #006666;"><span style="font-size: medium;"><strong>14、</strong>

建纳入版本控制下的新目录</span>
</p>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; font-size: 13px; width: 98%; color: #006666; background-color: #eeeeee;">
<span style="font-size: medium;"><strong><span class="highlight">svn</span>
mkdir</strong>
: 创建纳入版本控制下的新目录。<br>
用法:
1、mkdir PATH…<br>
2、mkdir URL…<br>
创建版本控制的目录。<br>
1、每一个以工作副本 PATH
指定的目录,都会创建在本地端,并且加入新增<br>
调度,以待下一次的提交。<br>
2、每个以URL指定的目录,都会透过立即提交于仓库中创建。<br>

这两个情况下,所有的中间目录都必须事先存在。 </span>
</div>
<p style="color: #006666;"><span style="font-size: medium;"><strong>15、</strong>

复本地修改</span>
</p>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; font-size: 13px; width: 98%; color: #006666; background-color: #eeeeee;">
<span style="font-size: medium;"><strong><span class="highlight">svn</span>
revert</strong>
: 恢复原始未改变的工作副本文件
(恢复大部份的本地修改)。revert:<br>
用法: revert PATH…<br>
注意:
本子命令不会存取网络,并且会解除冲突的状况。但是它不会恢复<br>
被删除的目录 </span>
</div>
<p style="color: #006666;"><span style="font-size: medium;"><strong>16、</strong>

码库URL变更</span>
</p>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; font-size: 13px; width: 98%; color: #006666; background-color: #eeeeee;">
<span style="font-size: medium;"><strong><span class="highlight">svn</span>
switch (sw):</strong>
更新工作副本至不同的URL。<br>
用法:
1、switch URL [PATH]<br>
2、switch –relocate FROM TO [PATH...] </span>
<p><span style="font-size: medium;">1、更新你的工作副本,映射到一个新的URL,其行为跟“<span class="highlight">svn</span>
update”很像,也会将<br>
服务器上文件与本地文件合并。这是将工作副本对应到同一仓库中某个分支或者标记的<br>
方法。<br>
2、改写工
作副本的URL元数据,以反映单纯的URL上的改变。当仓库的根URL变动<br>
(比如方案名或是主机名称变动),但是工作副本仍旧对映到同一仓库的同
一目录时使用<br>
这个命令更新工作副本与仓库的对应关系。</span>
</p>
</div>
<p style="color: #006666;"><span style="font-size: medium;"><strong>17、</strong>

决冲突</span>
</p>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; font-size: 13px; width: 98%; color: #006666; background-color: #eeeeee;">
<span style="font-size: medium;"><strong><span class="highlight">svn</span>
resolved:</strong>
移除工作副本的目录或文件的“冲突”状态。<br>

法: resolved PATH…<br>
注意: 本子命令不会依语法来解决冲突或是移除冲突标记;它只是移除冲突的<br>
相关文件,然后让
PATH 可以再次提交。 </span>
</div>
<p style="color: #006666;"><span style="font-size: medium;"><strong>18、</strong>

出指定文件或URL的内容。</span>
</p>
<p>
<span style="font-size: medium;"><span style="color: #006666;"><strong><span class="highlight">svn</span>
</strong>
<strong>cat</strong>

目标[@版本]…如果指定了版本,将从指定的版本开始查找。<br><span class="highlight">svn</span>
cat
-r PREV filename &gt; filename (PREV 是上一版本,也可以写具体版本号,这样输出结果是可以提交的)</span>
</span>
</p>
<p></p>
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics