我使用几乎空的工作流程来玩门禁签到,只是为了理解内部工作原理。
以下是我的情景:
所以,我创建了一个新文件(1.txt)并将其签入。更改记录在一个新的shelveset中,现在我要去代理并首先确保没有更改,并且搁置可用:
PS D:\tfs\DFGatedCheckInTest2> tf status /recursive
There are no pending changes.
PS D:\tfs\DFGatedCheckInTest2> dir 1.txt -ErrorAction SilentlyContinue
PS D:\tfs\DFGatedCheckInTest2> tf history ..\..\..\ /version:T /stopafter:1 /recursive /noprompt
Changeset User Date Comment
--------- ----------------- ---------- ------------------------------------------------------------------------------------------------------------------------
105631 DAYFORCE\mkhar... 10/24/2014
PS D:\tfs\DFGatedCheckInTest2> tf shelvesets "Gated_2014-10-24_12.09.49.4626;DAYFORCE\mkharitonov" /format:detailed
===============================================================================================================================================================
Shelveset: Gated_2014-10-24_12.09.49.4626
Owner : DAYFORCE\mkharitonov
Date : Friday, October 24, 2014 12:09:49 AM
Comment :
Adding 1.txt
PS D:\tfs\DFGatedCheckInTest2> tf status /shelveset:"Gated_2014-10-24_12.09.49.4626;DAYFORCE\mkharitonov"
File name Change User Shelveset
--------- ------ -------------------- -------------------------------------------------------------------------------------------------------------------------
$/DFDev/mark
1.txt add DAYFORCE\mkharitonov Gated_2014-10-24_12.09.49.4626
1 change(s)
到目前为止一切顺利 - 没有变化,文件不存在且搁置已经准备就绪。现在我搁置了搁置:
PS D:\tfs\DFGatedCheckInTest2> tf unshelve "Gated_2014-10-24_12.09.49.4626;DAYFORCE\mkharitonov" /noprompt
$/DFDev/mark/1.txt:
opened for add in CANWS212;DAYFORCE\mkharitonov
Unshelving add: 1.txt
PS D:\tfs\DFGatedCheckInTest2> tf status /recursive
File name Change Local path
--------- ------ ----------------------------------------------------------------------------------------------------------------------------------------------
$/DFDev/mark
1.txt add D:\TFS\DFGatedCheckInTest2\1.txt
1 change(s)
PS D:\tfs\DFGatedCheckInTest2> dir 1.txt
Directory: D:\tfs\DFGatedCheckInTest2
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a--- 10/24/2014 12:16 AM 0 1.txt
同样,一切都如预期一样 - status命令显示正确的挂起更改并创建新文件。接下来我检查货架:
PS D:\tfs\DFGatedCheckInTest2> tf checkin /shelveset:"Gated_2014-10-24_12.09.49.4626;DAYFORCE\mkharitonov" /bypass /force
Changeset #105632 checked in.
PS D:\tfs\DFGatedCheckInTest2> dir 1.txt
Directory: D:\tfs\DFGatedCheckInTest2
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a--- 10/24/2014 12:16 AM 0 1.txt
PS D:\tfs\DFGatedCheckInTest2> tf history ..\..\..\ /version:T /stopafter:1 /recursive /noprompt
Changeset User Date Comment
--------- ----------------- ---------- ------------------------------------------------------------------------------------------------------------------------
105632 DAYFORCE\mkhar... 10/24/2014 Adding 1.txt
PS D:\tfs\DFGatedCheckInTest2> tf shelvesets "Gated_2014-10-24_12.09.49.4626;DAYFORCE\mkharitonov" /format:detailed
No shelvesets found matching Gated_2014-10-24_12.09.49.4626;DAYFORCE\mkharitonov
PS D:\tfs\DFGatedCheckInTest2>
看起来很好 - 文件在那里,一个新的变更集被添加到历史记录中并删除了shelveset。
但是,这部分我不明白,仍然有待更改:
PS D:\tfs\DFGatedCheckInTest2> tf status /recursive
File name Change Local path
--------- ------ ----------------------------------------------------------------------------------------------------------------------------------------------
$/DFDev/mark
1.txt add D:\TFS\DFGatedCheckInTest2\1.txt
1 change(s)
为什么???
我看到摆脱这个待定更改的唯一方法是撤消并明确获取新的变更集:
PS D:\tfs\DFGatedCheckInTest2> tf undo /noprompt /recursive .
Undoing add: 1.txt
PS D:\tfs\DFGatedCheckInTest2> dir 1.txt -ErrorAction SilentlyContinue
Directory: D:\tfs\DFGatedCheckInTest2
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a--- 10/24/2014 12:16 AM 0 1.txt
PS D:\tfs\DFGatedCheckInTest2> tf status /recursive /noprompt
There are no pending changes.
PS D:\tfs\DFGatedCheckInTest2> tf status 1.txt
There are no pending changes.
PS D:\tfs\DFGatedCheckInTest2> tf history 1.txt /noprompt
Changeset Change User Date Comment
--------- -------------------------- ----------------- ---------- ---------------------------------------------------------------------------------------------
105632 add DAYFORCE\mkhar... 10/24/2014 Adding 1.txt
PS D:\tfs\DFGatedCheckInTest2> tf get /version:C105632
D:\TFS\DFGatedCheckInTest2:
Getting 1.txt
PS D:\tfs\DFGatedCheckInTest2> dir 1.txt
Directory: D:\tfs\DFGatedCheckInTest2
Mode LastWriteTime Length Name
---- ------------- ------ ----
-ar-- 10/24/2014 12:44 AM 0 1.txt
PS D:\tfs\DFGatedCheckInTest2>
在这里,我不明白另一件事。如果我撤消了更改,那么1.txt仍然是版本化的?我在这里取消了什么?
获取新的变更集会重写文件或仅更改其上次修改时间(从上午12:16到上午12:44),这同样很糟糕。实际上,假设我在不利的情况下建立了数以万计的文件。现在,它们将在下一个gated check-in中再次构建,因为tf get
命令突然增加了源文件的最后修改时间戳。 (当然,第二个tf get /version:C105632
什么都不做)
这太糟糕了。我一定很困惑,因为它不能像设计那样。
请向我解释我在这里遇到的错误。
答案 0 :(得分:3)
这完全是关于容器,货架和工作空间。
所以此时你有一个New
文件,TFS注意到它是一个待定的ADD
(它在源代码管理中还没有存在(没有其他人可以访问它,它只存在于您的工作区(容器B)中,因为您从容器A签入后没有操作它
撤消文件正在删除工作区Not the same file that was commited from the shelveset
中文件的ADD,但现在TFS中的文件名与您在本地工作区(容器B)中的文件名相同。所以TFS做了它认为正确的事情,并用Source Control中的那个替换你的本地文件。
如果您按照标签使用TFS2010,那么这听起来是正确的,您将使用服务器工作区,因此只会检测到已通知TFS的更改/挂起编辑。在2012/2013年,可以使用本地工作空间,可以检测用户在没有通知TFS的情况下完成工作空间的更改。