내부 작업을 이해하기 위해 거의 빈 워크 플로우를 사용하여 게이트 체크 인을 사용하고 있습니다.게이트 쉘셋을 체크인해도 보류중인 변경 사항에 영향을주지 않는 이유는 무엇입니까?
- 가 변화합니다
여기 내 시나리오입니다.
- 체크 인, 게이트 체크 인 트리거 - 워크 플로는 아무 작업도 수행하지 않습니다.
- 게이팅 된 체크인과 관련된 에이전트로 이동하여 쉘셋으로 조금만 재생하십시오 (아래 참조).
그래서 새 파일 (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)
지금까지 아무런 변화가 없었습니다. 파일은 존재하지 않으며 쉘셋 세트가 준비되었습니다. 지금은 보류 집합을 unshelving 오전 :
는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
는 다시 모든 것이 예상대로된다 - 상태 명령은 바로 대기의 변화를 보여주고 새 파일이 만들어집니다. 다음으로는 보류 집합 체크인 :
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>
좋아 보인다 - 파일이 새 변경 집합이 역사에 추가되고있다 및 보류 집합이 삭제됩니다. 그러나
, 내가 이해하지 못하는이 부분, 여전히 보류중인 변경 :
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)이 변경됩니다. 이는 매우 나쁜 것입니다. 사실, 내가 unshelve 다음과 같은 엄청난 파일을 구축한다고 가정 해보십시오. 소스 파일의 마지막 수정 타임 스탬프가 tf get
명령에 의해 부딪혀서 다음 게이트 체크인에서 다시 빌드됩니다. (두 번째 tf get /version:C105632
은 아무 것도하지 않습니다.)
이것은 끔찍합니다. 나는 혼란스러워 할 것입니다. 왜냐하면 이것은 디자인 상으로는 그렇게 될 수 없기 때문입니다.
여기에 내가 잘못 왔는지 설명해주십시오.
+1 자세한 설명은 하지만 내가 명시 적으로 변경 집합을 취소하고 가져와야하는 상황을 피하려면 어떻게해야합니까? 지금 다음 게이팅 된 체크인은이 실행 취소 패턴 때문에 이전 파일과 동일한 파일을 다시 작성합니다 (1 단계 뒤로). 어떻게 해결 될 수 있습니까? – mark
그것은 패턴이 아니며, 당신이 그것을 실행 한 방식입니다. 일반적으로 IDE에서 제출하면 IDE는 게이트 된 빌드가 발생할 것임을 알립니다. 이 팝업 창에서 파일을 현재 상태로 유지하거나 변경 사항을 롤백 할 수 있습니다. 빌드가 완료되면 작업 영역을 통합 할 수 있습니다 (사실상 실행 취소). 키는 쉘브 셋에 대한 효과 (빌드의 영향을받으며 쉘브 셋을 생성하는 트랜잭션의 영향을 받음)에 비해 작업 공간의 상태 (빌드의 영향을받지 않음)이므로 작업 영역을 되돌릴 수 있습니다. –
작업 한 내용을 2 개의 작업 공간 (shelveset)에서 2 개의 파일을 수정하면 작업 영역이 오래되어 TFS와 다시 동기화해야합니다. –