转自:http://blog.xieyc.com/tfs-disable-multiple-check-out-and-force-to-undo-locking/ | 小谢的小站

[TFS] 禁止默认允许多人签出和强制解除签入签出锁

作者:xieyc   发布:2013-07-03 10:20   字符数:3925   分类:编程   阅读: 8,134 次   抢沙发  
 

使用 Visual Studio 2010 Team Foundation Server 进行源代码编辑时,可以对代码实施以下三种锁定之一:

  • Unchanged - Keep any existing lock
  • Check Out - Prevent other users from checking out and checking in
  • Check In - Allow other users to check out but prevent them from checking in

貌似这个“签出”和“签入”锁的概念很类似于数据库中的“排他锁(独占锁,X)”和“共享锁(S)”的概念。

下面讨论在使用“签入”和“签出”锁中遇到的两个问题,两者的适用场合有一定对立性。

一、如何关闭TFS源代码管理的多人签出功能?

当进行代码的“签出”操作时,可以选择上述三种锁定措施之一,默认是“不改变”;如果直接对代码进行编辑时,会进行自动签出,并默认使用“不改变”的锁定措施。这种措施在多人并发修改代码时,会造成签入时的大量冲突。因此,可能会希望改变TFS的默认选项,对签出的代码强制加上“排他锁”。

操作方法是:右键选中项目--->团队项目设置--->源代码管理,在弹出对话框的 "签出设置"选项卡中查看以下界面:

系统默认勾选了“启用多个签出”,我们可以将其去掉;同时注意“启用在签出时获取最新版本”这个选项默认不被勾选,方便起见,可以将其勾选。(注意:该设置会影响回滚版本的操作!因为一般的回滚版本操作为:获取指定版本 - 签出 - 签入 - 解决冲突时保留本地版本。)

取消“启用多个签出”的选项后,在签出代码时,会默认只能选择施加排他锁:

二、怎么强制解除签入签出锁(正在编辑)

网上搜索这个问题的关键字,结果大都是网友“随风飘扬”针对 Visual Studio 2008 Team Foundation Server 所写的一篇维护手记(见文末参考资料列表)。

下面针对 TFS 2010 的环境,写一下具体应怎么进行强制解除签入签出锁的操作。

我们在使用TFS的时候会使用到TFS中的SourceControl,SourceControl中的优点我就不用多说了,但是SourceControl有个比较致命的缺点,也是SourceControl基于工作区这种模式下所带来的问题,首先SourceControl源码管理会在每个客户机器上创建一个工作区,然后这个工作区域映射到服务器上的源码文件夹,我们在正常签入、签出的时候,我们的源码会在服务器到客户端的工作区进行操作,这是没有问题的。但是我们在使用TFS的时候基本上都是多人的并发签入签出,而TFS在设计的时候是支持签入锁定与签出锁定的,默认项目组成员在签出项目的时候是不应用任何锁的。即使有项目组成员在把源码项目从TFS的SourceControl中签出,并且加入了签出锁或者是签如锁,这样也无所谓,只要这个项目组的成员按照规矩把这个项目最后在签入到SourceControl中,签出的锁定会自动的解除。

关键的问题是如果这个项目组的成员喝咖啡去了,或者放假了,或者这个项目组的成员离职了,但是他们在离开前对项目中几个文件施加了签出(入)锁,这时如果项目组的下个成员想要修改被锁定的文件,或者是TFS的管理员想要在SourceControl中删除这个项目,问题就出现了。当我们通过Team Explorer进行操作的时候,Team Explorer会提示有签出(入)锁,然后告诉我们是哪个用户,在哪个工作区进行的锁定。但是我们无法通过Team Explorer图形界面来进行撤出签出操作,只能通过TFS命令:undo来进行操作,强行撤出别人签出的文件。

首先说明下工作区的定义,一个完整的工作区包括应该包括“WorkSpaceSample;[所在的域\]用户名”,用逗号分隔工作区(默认是计算机名)和用户名。(TFS 2008中的工作区定义似乎还包括一个用户序号,即“WorkSpaceSample;[所在的域\]用户名[:用户序号]”,不知道 TFS 2010 是否已经将其取消。)

撤销的步骤如下:

1、命令行模式进入tf程序所在目录(需要管理员权限)

cd  C:\Program Files\Microsoft Visual Studio 10.0\Common7\IDE

如果是在64位操作系统上安装的,可能是:

C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE

2、用 tf workspaces 命令查找该用户(这里以zwt为例)的工作区完整定义,这里指定了/server参数和/owner参数,如果不指定/owner参数,默认用户名为执行该命令的用户,即查找满足“*;(执行该命令用户名)”的工作区。

tf workspaces  /server:http://dq311-server:8080/tfs  /owner:zwt

上述命令执行结果如下(附不使用任何参数的tf workspaces命令执行结果对比)

3、查看该用户挂起的更改(这里查找用户xyc在任意工作区挂起的更改)

tf status  /server:http://dq311-server:8080/tfs  /workspace:* /user:xyc

执行结果(注意服务器的文件路径和文件名分两行显示):

4、使用tf undo命令强制撤销他的签出,命令如下:

tf undo /server: TFS服务器URL  /workspace:WorkSpaceSample;[所在的域\]用户名[:用户名序号]  $/路径/文件名

例如

tf undo  /server:http://dq311-server:8080/tfs  /workspace:HY-PC;hy   $/CTCS/TSAGS_TEAM/TestHY/Program.cs

如果需要撤销的项目较多,可以使用通配符 * 来代替文件名,以及 /recursive 参数(递归),例如

tf undo  /server:http://dq311-server:8080/tfs  /workspace:HY-PC;hy   $/CTCS/TSAGS_TEAM/* /recursive

根据被撤销操作的工作区是否位于执行undo操作的计算机上,结果有两种情况:

第一种是被undo的工作区正好位于执行该操作的计算机上,则服务器和本地代码可以同时被undo,其效果和在Visual Studio中对文件执行“Undo Pending Changes”一样。

更多的情况是被undo的工作区不在执行该操作的计算机上,则只能在服务器上撤销操作。

然后大家就可以刷新你的Team Explorer查看那个加锁的文件,执行Undo操作后,该用户对这个文件的锁定与挂起全部取消了,这样你就可以通过Team Explorer进行修改,或者删除等更多的操作了。

需要注意的是,上述第二种情况下,虽然“签出”状态已经被撤销了,文件版本恢复到了服务器版本,但是该工作区本地的代码修改并不会被撤销,从而和服务器代码是不一致的!也即“版本一致,实际代码不一致”,这种情况下,在该工作区上执行“获取最新版本”命令也无法更新到服务器版本,只能通过“手动获取指定版本”等方法来解决冲突。(或者也可以等该代码下次版本更新?)

此外,有几个地方值得说明(部分可能仅适用于TFS 2008):

1、关于用户名序号

举个例子,如果你的用户名删除了,然后又新建了一个同名的用户名,那么原有的用户名与工作区的关联还是存在的,所以就会出现两个同名工作区,Work1;WangGi:5,与Work1;WangGi。这样你在操作的时候就可以根据不同的序号来找到对应的工作区了。

2、如何查看用户名序号

你可以实用这个命令来查询工作区的完整信息(注意在执行命令的时候有管理员的权限):

tf workspaces /owner:* /computer:* /server:teamserver2 /format:detailed

该命令查看当前服务器所有机器上的工作区情况,包含工作区的名字、工作区的ower等,这样你的用户后面的ID就可以看见了。

3、如果工作区不存在了怎么办?(例如工作区重装系统)

基本没有影响。

首先使用命令行模式,显示所有的工作区,然后找到你所要删除的工具删除即可,删除工作区的命令是:

tf workspace  /delete workspacename;workspaceowner

例如删除用户dq311在HY-PC上的工作区,命令为:

tf workspace  /server: http://dq311-server:8080/tfs  /delete HY-PC;dq311

提示:

1、如果还有其他问题,建议可以 tf / ?,就会有详细的操作说明出来;

2、注意 tf workspace 和 tf workspaces 是两个不同的命令。

三、如何将源代码管理中的代码取出来,让它不包含vssscc扩展名的文件

这个问题其实和签入签出锁定无关。查阅资料时正好看到了有人问,就顺便记录在这里。

首先可以通过获取最新版本的项目到本地工作区,然后在解决方案管理器中,点击这个项目的解决方案,然后在文件菜单下的源码管理下的源码管理设置,断开与本地工作区内项目的关联即可。

参考资料:

[1] 博客园:随风飘扬:Team Foundation Server 维护手记一(强制解除签入签出锁定)

[2] http://stackoverflow.com/questions/13014746/tfs-2012-disable-multiple-check-out-not-working

[3] 强制取消TFS2008中其它成员的签出文件

[转][TFS] 禁止默认允许多人签出和强制解除签入签出锁的更多相关文章

  1. TFS签入签出规范

    TFS签入签出规范1)开发平台的约定a)开发操作系统环境和最终用户使用环境 包含Service Pack版本号开发环境 Windows2008SP1 Windows7用户环境 Windows2008S ...

  2. TFS命令tf:undo(强制签入签出文件)

    由于修改计算机名称或不同电脑上操作忘记签入,则需要强制签入文件 具体步骤如下: 1.在命令行中输入"cd  C:\Program Files\Microsoft Visual Studio ...

  3. JS事件——禁止事件冒泡和禁止默认事件

    Event 对象 Event 对象代表事件的状态,比如事件在其中发生的元素.键盘按键的状态.鼠标的位置.鼠标按钮的状态. 事件通常与函数结合使用,函数不会在事件发生前被执行! 一.什么是事件冒泡 在一 ...

  4. [TFS]TFS强制删除离职人员签出锁定项的方法

    步骤: 1.连接到TFS数据库服务器的tfsversioncontrol库: 2.查tbl_workspace表,找出那哥们的工作目录, 如select * from tbl_workspace wh ...

  5. TFS强制删除离职人员签出锁定项的方法(转)

      项目组一哥们走的时候以独占方式迁出了文件,现在其他人都无法修改,管理员似乎也无法将文件解除.经过摸索,找到了一种暴力的方法——直接改TFS数据库.虽然暴力,却能实实在在地解决这个问题. 步骤: 1 ...

  6. 3. 上网调查一下目前流行的源程序版本管理软件和项目管理软件都有哪些, 各有什么优缺点? (提示:搜索一下Microsoft TFS、GitHub、Trac、Bugzilla、Rationale,Apple XCode),请用一个实际的源代码管理工具来建立源代码仓库,并签入/签出代码。

    上网调查一下目前流行的源程序版本管理软件和项目管理软件都有哪些, 各有什么优缺点? ---------------答题者:徐潇瑞 (1)Microsoft TFS的优缺点: 优点:是对敏捷,msf,c ...

  7. apache禁止默认虚拟主机

    禁止默认虚拟主机:作用使除特定域名外,其它的域名/ip无法访问此站点. 在虚拟主机配置文件中 即:/usr/local/apache2/conf/extra/httpd-vhosts.conf 将其中 ...

  8. 没有job offer,拿加拿大工签PGWP回国如何续签加拿大小签?

     很多同学因为在加拿大毕业后申请了三年的工作签证PGWP之后匆匆回国,没有来得及续签小签,但是回国一段时间之后又想要回加拿大,想要用自己的三年工签来续自己的小签.拿了加拿大PGWP没有job offe ...

  9. target存放的是编译后的.class文件地方 默认情况下不会讲非class文件放入进入 如果要使用非.class文件 需要通过增加配置方式自动加入文件

    target存放的是编译后的.class文件地方 默认情况下不会讲非class文件放入进入 如果要使用非.class文件 需要通过增加配置方式自动加入文件

随机推荐

  1. IE6 png 透明--四种解决方法

    FF和IE7已经直接支持透明的png图了,下面这个主要是解决IE6下透明PNG图片有灰底的 方法一:定义一个样式,给某个div应用这个样式后,div的透明png背景图片自动透明了.(注意两处图片的路径 ...

  2. ZOJ3238 Water Ring(计算几何)

    题意:给你一个圆形和很多个矩形,然后要你求圆形的圆周有多少被矩形覆盖. 思路:比赛的时候是有思路的了,不过一直在调别的题,最后剩下30分钟肯定来不及敲.想法是这样的,要是我们可以求出每个矩形覆盖了圆周 ...

  3. POJ 2028

    #include <iostream> #define MAXN 200 using namespace std; int mark[MAXN]; int main() { //freop ...

  4. jvm 之 国际酒店 8 月 19 一次full GC 导致的事故

    事故经过: 1  15:18收到短信报警:国际酒店调用OMS queryGorderOrderList方法失败:成单接口调用OMS获取token失败. 2  查看checkList发现15:18开始发 ...

  5. ExtJs之DHTML,DOM,EXTJS的事件绑定区别

    <!DOCTYPE html> <html> <head> <title>ExtJs</title> <meta http-equiv ...

  6. (0)图像处理opengl 写在前面的话

    项目2,终于要开始了 很多波折,都不想说了 开始吧 以下内容参考网上资料 OpenGL(Open Graphics Library)是一个跨编程语言.跨平台的专业图形程序接口. OpenGL是SGI公 ...

  7. 传入sql数组字符串,输出table

    CREATE function [dbo].[split](@aString varchar(),@pattern varchar()) returns @temp table([Sid] [, ) ...

  8. C和C++中结构体(struct)、联合体(union)、枚举(enum)的区别

    C++对C语言的结构.联合.枚举 这3种数据类型进行了扩展. 1.C++定义的结构名.联合名.枚举名 都是 类型名,可以直接用于变量的声明或定义.即在C++中定义变量时不必在结构名.联合名.枚举名 前 ...

  9. ubuntu系统使用minicom终端操作说明

    http://blog.chinaunix.net/uid-22030783-id-3350834.html 在linux下,使用minicom作为串口终端工具,默认的串口设备是/dev/ttyS0, ...

  10. JavaWeb项目开发案例精粹-第4章博客网站系统-006View层

    1.showAllArticle.jsp <%@ page language="java" contentType="text/html; charset=gb23 ...