转自: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. Extjs文本输入域

    var form = Ext.create('Ext.form.Panel', {             renderTo: Ext.getBody(),             frame: tr ...

  2. javascript笔记 面向对象

    Javascript是一种面向对象的弱语言,既然有面向对象,就有继承 继承: 1.call函数和apply函数:区别在于它们参数上的不同,固定参数的用call,可变参数的用apply.换句话说,就是a ...

  3. Google NACL 简介

    Back to README Getting Started This page tells you how to install Native Client and run demos, both ...

  4. 安装软件(名称不记得了)后,系统开机提示 visual studio just-in-time debugger窗口(WINDOWS错误提示框)

    出现这种情况,往往是因为原先安装有VS,后来因某些原因(比如:卸载)导致VS无法使用!!当系统中的有些软件出现错误时,会自动调用vs进行调试,但因为VS无法使用,就出现了visual studio j ...

  5. POJ 2182

    #include <iostream> #define MAXN 8005 using namespace std; int _m[MAXN]; int main() { //freope ...

  6. Linux下进程通信的八种方法

    Linux下进程通信的八种方法:管道(pipe),命名管道(FIFO),内存映射(mapped memeory),消息队列(message queue),共享内存(shared memory),信号量 ...

  7. ABP集合帖

    http://www.cnblogs.com/kebinet/p/5341663.html http://www.cnblogs.com/farb/p/ABPAdvancedTheoryContent ...

  8. Project Euler 103:Special subset sums: optimum 特殊的子集和:最优解

    Special subset sums: optimum Let S(A) represent the sum of elements in set A of size n. We shall cal ...

  9. 注塑成型工艺知识大全(Injection Molding)

    注塑成型,广泛用于热塑性塑料产品的制造工艺 工艺成本:模具费用(高),单件费用(低) 典型产品:汽车塑料部件,消费电子产品塑料外壳等 产量适合:只适合大批量生产 质量:极高的表面精确度,同一批次的产品 ...

  10. Java:抽象类abstract和接口Interface

    一.抽象类:abstract 抽象类就是为了继承而存在的,如果你定义了一个抽象类,却不去继承它,那么等于白白创建了这个抽象类,因为你不能用它来做任何事情.对于一个父类,如果它的某个方法在父类中实现出来 ...