2014-10-24 2 views
0

내부 작업을 이해하기 위해 거의 빈 워크 플로우를 사용하여 게이트 체크 인을 사용하고 있습니다.게이트 쉘셋을 체크인해도 보류중인 변경 사항에 영향을주지 않는 이유는 무엇입니까?

  1. 가 변화합니다

    여기 내 시나리오입니다.

  2. 체크 인, 게이트 체크 인 트리거 - 워크 플로는 아무 작업도 수행하지 않습니다.
  3. 게이팅 된 체크인과 관련된 에이전트로 이동하여 쉘셋으로 조금만 재생하십시오 (아래 참조).

그래서 새 파일 (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은 아무 것도하지 않습니다.)

이것은 끔찍합니다. 나는 혼란스러워 할 것입니다. 왜냐하면 이것은 디자인 상으로는 그렇게 될 수 없기 때문입니다.

여기에 내가 잘못 왔는지 설명해주십시오.

답변

3

이것은 모두 컨테이너, 선반 세트 및 작업 공간에 관한 것입니다.

  • 파일을 만들고 선반 집합 (컨테이너 A)에 커밋합니다.
  • 그런 다음 빌드 에이전트를 고토
  • 그런 다음 (소스 제어에 컨테이너 A에서)를 보류 집합을 커밋 로컬 작업 공간 (컨테이너 B)에 보류 집합 것을 을 얻을 컨테이너 A로부터의 검사는 성공적인 및 컨테이너 A는 문이 보류 집합이
  • 당신은 당신 가 모든 작업을 완료하지 않은 에이전트 작업 공간 (컨테이너 B)으로 돌아갑니다 ( 경우 그것이 그대로 남아있을 것입니다 실패)가 수명주기의 완료되었음을 반영하기 위해 을 삭제, 파일을 unshevling하기 때문에.

그래서이 시점에서 당신이 TFS는 보류중인 ADD 인 것으로 언급 한 New 파일이 (아직 소스 컨트롤에 존재하지 않는 (다른 사람이 그것을 액세스 할 수 없습니다, 그것은 단지 (작업 공간에 존재 컨테이너 B), 컨테이너 A에서 체크인 한 이후 조작하지 않았으므로)

파일을 실행 취소하면 작업 영역 Not the same file that was commited from the shelveset에있는 파일에 대한 ADD가 제거되지만 이제는 TFS에 동일한 이름의 파일이 있습니다. 로컬 작업 공간 (컨테이너 B)에있는 파일이므로 TFS는 원본 파일을 소스 제어에서 가져온 것으로 바꿉니다.

태그별로 TFS2010을 사용하는 경우이 소리가 정확하면 서버 작업 영역에서 작업하게되므로 TFS에 통보 된 변경 사항/보류중인 편집 만 감지됩니다. 2012/2013 로컬 작업 공간에서 TFS 알림없이 사용자가 수행 한 작업 영역의 변경 사항을 감지 할 수 있습니다.

+0

+1 자세한 설명은 하지만 내가 명시 적으로 변경 집합을 취소하고 가져와야하는 상황을 피하려면 어떻게해야합니까? 지금 다음 게이팅 된 체크인은이 실행 취소 패턴 때문에 이전 파일과 동일한 파일을 다시 작성합니다 (1 단계 뒤로). 어떻게 해결 될 수 있습니까? – mark

+0

그것은 패턴이 아니며, 당신이 그것을 실행 한 방식입니다. 일반적으로 IDE에서 제출하면 IDE는 게이트 된 빌드가 발생할 것임을 알립니다. 이 팝업 창에서 파일을 현재 상태로 유지하거나 변경 사항을 롤백 할 수 있습니다. 빌드가 완료되면 작업 영역을 통합 할 수 있습니다 (사실상 실행 취소). 키는 쉘브 셋에 대한 효과 (빌드의 영향을받으며 쉘브 셋을 생성하는 트랜잭션의 영향을 받음)에 비해 작업 공간의 상태 (빌드의 영향을받지 않음)이므로 작업 영역을 되돌릴 수 있습니다. –

+0

작업 한 내용을 2 개의 작업 공간 (shelveset)에서 2 개의 파일을 수정하면 작업 영역이 오래되어 TFS와 다시 동기화해야합니다. –

관련 문제