왜 TFS가 최신 작업을 지속적으로 얻지 못하는 이유는 무엇입니까?
기능이 철저히 테스트되었을 것이라고 생각했을 것입니다.
내가해야 할 일은 특정 버전을 얻은 다음 덮어 쓸 수있는 파일을 확인하고 모든 파일을 덮어 쓰는 것입니다.
로컬 설정이 엉망입니까? 아니면이 작업을 수행합니까?
왜 TFS가 최신 작업을 지속적으로 얻지 못하는 이유는 무엇입니까?
기능이 철저히 테스트되었을 것이라고 생각했을 것입니다.
내가해야 할 일은 특정 버전을 얻은 다음 덮어 쓸 수있는 파일을 확인하고 모든 파일을 덮어 쓰는 것입니다.
로컬 설정이 엉망입니까? 아니면이 작업을 수행합니까?
답변:
TFS는 "최신 정보 얻기"의 기능을 재정의했습니다. TFS 용어로 Get Latest는 최신 버전의 파일을 가져 오지만 서버가 이미 작업 공간에 있다고 생각하는 파일은 무시합니다. 나에게 그리고 지구상의 다른 모든 사람들에게 잘못되었습니다.
이 링크를 참조하십시오 : http://blogs.microsoft.co.il/blogs/srlteam/archive/2009/04/13/how-get-latest-version-really-works.aspx
원하는 작업을 수행 할 수있는 유일한 방법은 특정 버전 가져 오기를 수행 한 다음 "덮어 쓰기 ..."상자를 모두 선택하는 것입니다.
때로는 Get specific version
두 확인란 을 모두 선택해 도 최신 파일이 표시되지 않습니다. 파일을 변경 한 후 최신 버전을 다시 가져 와서 변경 사항을 취소하려고합니다. 글쎄 ... 그게 Undo pending changes
목적이 아니라 목적입니다 Get specific version
.
만약에 의심이된다면:
그리고 이것은 내가 방금 발견 한 가장 좋아하는 것입니다.
다음 Output
과 같은 메시지가 있는지 창을 주시 하십시오.
경고-편집 대기 중이므로 R : \ TFS-PROJECTS \ www.example.com \ ExampleMVC \ Example MVC \ Example MVC.csproj를 새로 고칠 수 없습니다.
이 중요한 메시지는 출력 창에 나타납니다. 다른 알림은 없습니다! 보류중인 변경 사항이없고 방금 명시 적으로 요청한 파일이 검색되지 않았다는 다른 대화 상자 메시지가 없습니다! 그리고 예- Undo pending changes
파일을 실행 하고 가져 와서이 문제를 해결 하십시오.
Undo pending changes
)이 저에게 도움이되었습니다.
어떻게 작동하지 않는지에 대한 예없이 문장에 응답하기는 어렵지만 TFVC (TFS 2012 이전의 메커니즘 인 "서버 작업 공간"모드) 가 로컬 파일 시스템의 상태를 검사하지 않는다는 것을 이해하는 것이 중요합니다 . TFVC 서버 작업 공간은 "체크 아웃 편집 체크인"유형의 시스템으로, 의도적으로 설계된 작업 공간의 상태를 결정하는 데 필요한 파일 I / O의 양을 크게 줄이려는 의도적 인 결정입니다. 대신 작업 공간 정보가 서버에 저장됩니다.
이를 통해 TFVC 서버 작업 공간을 매우 큰 코드베이스로 매우 효율적 으로 확장 할 수 있습니다. Visual Studio 또는 Windows 소스 트리와 같은 멀티 기가 바이트 코드 기반 인 경우 클라이언트는 로컬 파일 시스템을 스캔 할 필요가 없습니다. TFS와의 계약은 파일을 편집하려고 할 때 명시 적으로 파일을 체크 아웃합니다.
당신은 할 것으로 예상된다 없습니다 쓰기 전용으로 파일을 표시하고 먼저 체크 아웃 명시 적없이 변경합니다. 이 경로를 아래로 갈 경우, 서버는 파일에 변경 한 것을 알고하지 않고 수행하는 작업을 할 것이다 "최신 오기" 아니 당신이 만든 것을 서버에게하지 않았기 때문에, 해당 지역의 작업 공간을 업데이트 변화.
당신이 경우에 할 이 메커니즘을 파괴 다음은 사용할 수있는 tfpt reconcile
로컬로 만든 것을 변경은 해당 지역의 작업 공간을 검사하는 명령을 사용합니다.
"특정 버전 가져 오기"를 사용하고 "강제"및 "덮어 쓰기"옵션을 선택한 경우, TFS가 자신을 다치게하지 않도록 구현 한 모든 시행을 무시하는 습관이있을 가능성이 높습니다. TFVC 로컬 작업 공간을 고려해야합니다.
TFVC 로컬 작업 영역은 "편집 병합 커밋은"을 제공하면 것을 의미 버전 관리 시스템의 종류 하지 않는 명시 적으로 편집하기 전에 파일을 확인하고 그들이 필요 하지 않습니다 읽기 전용에 디스크. 대신 파일을 편집하기 만하면 클라이언트가 파일 시스템을 스캔하고 변경 사항을 확인한 후이를 보류중인 변경 사항으로 표시합니다.
TFVC 로컬 작업 영역 은 훨씬 더 나은 워크 플로우를 제공하므로 세분화 된 권한 제어가 필요없는 소규모 프로젝트에 권장 됩니다. 온라인 상태 일 필요는 없으며 편집하기 전에 파일을 명시 적으로 체크 아웃 할 필요가 없습니다.
TFVC 로컬 작업 공간은 TFS 2012에서 기본값이며, 사용 불가능한 경우 서버 관리자에게 문의해야합니다. (매우 큰 코드베이스 또는 엄격한 감사 요구 사항을 가진 조직은 TFVC 로컬 작업 영역을 비활성화 할 수 있습니다.)
Eric Sink의 훌륭한 책인 Version Control By Example 은 checkout-edit-checkin과 edit-merge-commit 시스템의 차이점과 하나가 다른 것보다 더 적절한 경우를 설명합니다.
전문 팀 파운데이션 서버 2013 이 책은 또한 TFVC 서버 작업 영역 및 TFVC 지역 작업 공간의 차이점에 대한 우수한 정보를 제공합니다. MSDN 설명서 및 블로그에서도 자세한 정보를 제공합니다.
TFS (Team Foundation Server)는 $ TF라는 숨겨진 디렉토리에서 로컬 사본을 추적합니다. "최신 버전 가져 오기"를 발행하면 TFS가이 폴더를보고 날씨가 최신 사본인지 확인합니다. 그렇다면 최신 사본을 다운로드하지 않습니다. 원본 파일이 있는지 여부는 중요하지 않습니다. 실제로 전체 폴더를 삭제했을 수 있습니다 (내 경우와 같이) TFS는 실제 파일을 보지 않고 변경 사항을 기록하는 숨겨진 디렉토리를 확인하기 때문에 최신 사본을 가져 오지 않습니다. 이 디자인의 결점은 시스템 외부에서 수행 된 작업은 TFS에 기록되지 않는다는 것입니다. 예를 들어, Windows 탐색기로 이동하여 폴더 나 파일을 삭제하면 TFS가이를 인식하지 못할 수 있습니다. 완전히 장님입니다. 적어도 나는 Windows 가이 파일을 삭제할 수는 없을 것이라고 기대하지만 그렇지 않습니다!
최신 복사본을 적용하는 한 가지 방법은 숨겨진 $ TF 폴더를 수동으로 삭제하는 것입니다. 그렇게하려면 명령 프롬프트로 이동하여 프로젝트가 체크 아웃 된 루트 폴더로 이동 한 후이 명령을 실행하십시오.
rd/s $tf // remove $TF folder and everything inside it
숨겨진 폴더를 확인하려면 다음을 사용하여 할 수 있습니다
dir /ah // display hidden files and folders
참고 : 파일을 저장하더라도 파일에 로컬 사본이 없다고 생각하면 tf는 모든 것을 다시 동기화합니다.
주의 :이 방법은 모든 위험 부담으로 사용하십시오. 중요한 작업에는 사용하지 마십시오.
불행하게도 TFS 2008에는 하나 이상의 버그가 있어야합니다.이 문제는 개발자 컴퓨터에서 정기적으로 발생하고 내가 일하는 서버를 구축하기 때문입니다.
Get Latest을 수행 할 수 있습니다. 최근 Get Get을 수행 한 후 커밋이 발생한 프로젝트의 히스토리 목록에서 디스크의 파일을 어떤 식 으로든 건드리지 않았지만 "Get Latest"기능이 수행 된 후 TFS 탭을 확인할 때 일부 파일은 여전히 최신 버전이 아니라고 말합니다.
분명히 TFS는 목록에 나와 있기 때문에 로컬에 오래된 파일이 있는지 확인할 수 있습니다. 그러나 Get Latest는 그렇게하지 못합니다. 최신 버전을 구하십시오. 내가 한 일을하면 특정 버전 가져 오기를 사용하고 대화 상자 맨 아래에있는 두 개의 확인란을 선택하면 파일이 검색됩니다.
빌드 서버에서 항상 특정 버전 가져 오기 기능을 대신 사용하도록 변경 했으므로 이제이 부분이 작동하지만 빌드 서버 (TeamCity)도 빌드를 시작하기 위해 파일에 변경 사항이 있는지 확인하는 데 의존하기 때문에 때로는 "변경된 사항 없음, 여기에 볼 사항 없음, 이동 없음"모드가되며 빌드 구성을 강제로 실행할 때까지 아무 것도 수행하지 않습니다.
수동으로 최신 + 빌드를 제외하고는 손대지 않은 컴퓨터 에서이 문제가 발생했기 때문에 파일을 무단 변경하지 않습니다. TFS가 혼란 스러울뿐입니다.
한 번이 자라서 디스크의 파일이 실제로 검색 된 버전과 실제로 이진 파일인지 확인했기 때문에 파일을 수동으로 변경하지 않았습니다.
또한 TFS가 실제로 내용을 보지 않고 디스크에서 파일이 변경되었는지 여부를 어떻게 "알 수 있는지"알 수 없습니다. TFS의 한 부분에서 파일이 실제로 최신 버전이 아니라는 것을 알 수 있으면 최신 버전 가져 오기가 절대적으로 최신 버전을 얻을 수 있어야합니다. 이것은 다른 답변에 대한 의견과 관련하여 여기에 있습니다.
내가 최근에 Get Get이 기대하는 바를 수행하지 않는다고 불평하는 개발자들에게서 본 대부분의 문제는 소스 제어 탐색기가 아닌 솔루션 탐색기에서 최신 가져 오기를 수행한다는 사실에서 비롯됩니다. 솔루션 탐색기는 솔루션의 일부인 파일 만 가져 와서 솔루션 내의 파일에 필요한 파일과 소스 제어의 일부를 무시합니다. 반면 소스 제어 탐색기는 로컬 작업 공간을 서버의 저장소와 비교하여 어떤 파일을 결정합니다 필요합니다.
TFS를 추가하고 싶을 때 MSBuild는 "@"폴더에서 특수 문자를 지원하지 않습니다.
과거에 프로젝트 폴더 중 하나가 External @ Project1이라는 이름으로 경험 한 적이 있습니다.
사용자 정의 msbuild 파일을 실행하기 위해 TFS 빌드 정의를 작성한 경우 작업 공간 폴더가 작업 공간이 최신 상태가되는 동안 External @ Project1 폴더에 컨텐츠를 가져 오지 않습니다. tfs get이 실패한 것 같지만 오류가 표시되지 않습니다.
시행 착오 후에 폴더 이름을 _Project1로 바꿉니다. voila 폴더 (_Project1)에 파일이 있습니다.
도구 : TFS 전동 공구
출처 : http://dennymichael.net/2013/03/19/tfs-scorch/
명령 : tfpt scorch / recursive / deletes C : \ LocationOfWorkspaceOrFolder
그러면 파일 목록을 삭제하거나 다운로드하라는 대화 상자가 나타납니다. 그에 따라 파일을 선택하거나 선택 취소하고 확인을 누릅니다. 격자 모양 (CheckBox, FileName, FileAction, FilePath)
원인 : TFS는 작업 공간의 항목과 만 비교합니다. 작업 공간 외부에서 변경 한 경우 TFS는이를 인식하지 못합니다.
바라건대 누군가 이것이 유용하다고 생각합니다. 다양한 위치에서 소수의 폴더를 삭제 한 후이 게시물을 찾았습니다. 삭제 한 폴더를 기억하지 못하는 경우 내가 사용했던 일반적인 강제 가져 오기 / 바꾸기 옵션이 제외되었습니다.