ทำไมทำไมทำไม TFS ถึงไม่ทำงานล่าสุดอย่างต่อเนื่อง?
คุณคงคิดว่าคุณสมบัตินั้นจะได้รับการทดสอบอย่างละเอียด
สิ่งที่ฉันต้องทำคือรับรุ่นที่เฉพาะเจาะจงจากนั้นตรวจสอบทั้งไฟล์ที่เขียนทับได้ + เขียนทับไฟล์ทั้งหมด
การตั้งค่าในเครื่องของฉันเกิดความสับสนหรือไม่
ทำไมทำไมทำไม TFS ถึงไม่ทำงานล่าสุดอย่างต่อเนื่อง?
คุณคงคิดว่าคุณสมบัตินั้นจะได้รับการทดสอบอย่างละเอียด
สิ่งที่ฉันต้องทำคือรับรุ่นที่เฉพาะเจาะจงจากนั้นตรวจสอบทั้งไฟล์ที่เขียนทับได้ + เขียนทับไฟล์ทั้งหมด
การตั้งค่าในเครื่องของฉันเกิดความสับสนหรือไม่
คำตอบ:
TFS นิยามใหม่ว่า "รับล่าสุด" ทำอะไร ในเงื่อนไข TFS Get ล่าสุดหมายถึงรับไฟล์เวอร์ชันล่าสุด แต่ไม่สนใจไฟล์ที่เซิร์ฟเวอร์คิดว่ามีอยู่ในพื้นที่ทำงานของคุณแล้ว ที่ฉันและคนอื่น ๆ บนโลกนี้ผิด
ดูลิงค์นี้: 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 \ ตัวอย่าง MVC \ ตัวอย่าง MVC.csproj เนื่องจากคุณมีการแก้ไขที่รอดำเนินการ
นี้ที่สำคัญปรากฏข้อความในหน้าต่างการส่งออก ไม่มีการแจ้งเตือนอื่น ๆ ! ไม่มีอะไรในการเปลี่ยนแปลงที่รอดำเนินการและไม่มีข้อความโต้ตอบอื่นที่บอกคุณว่าไฟล์ที่คุณเพิ่งร้องขอไม่ถูกเรียกคืนอย่างชัดเจน! และใช่ - คุณแก้ปัญหานี้โดยเพียงแค่เรียกใช้Undo pending changesและรับไฟล์
Undo pending changes) ใช้ได้กับฉัน
TFS เช่นเดียวกับผู้ให้บริการควบคุมแหล่งข้อมูลอื่น ๆ เช่น Perforce ทำสิ่งนี้เนื่องจากระบบทราบว่าเวอร์ชันล่าสุดที่คุณประสบความสำเร็จคืออะไรดังนั้นรับผลการแปลงล่าสุดเป็น "รับการเปลี่ยนแปลงตั้งแต่ x" หากคุณเล่นตามกฎและตรวจสอบสิ่งต่าง ๆ ก่อนที่จะแก้ไขคุณจะไม่สับสนเรื่องและ "รับล่าสุด" ทำตามที่ระบุไว้
ดังที่คุณเห็นคุณสามารถบังคับให้ประเมินทุกสิ่งใหม่ซึ่งมีการใช้แบนด์วิดท์ที่สูงกว่ามาก แต่ทำงานใกล้เคียงกับที่ SourceSafe ใช้
เป็นการยากที่จะตอบกลับคำสั่งโดยไม่มีตัวอย่างว่ามันใช้งานไม่ได้ แต่เป็นสิ่งสำคัญที่จะต้องเข้าใจว่า TFVC (ในโหมด "พื้นที่ทำงานเซิร์ฟเวอร์" ซึ่งเป็นกลไกก่อน TFS 2012) ไม่ได้ตรวจสอบสถานะของระบบไฟล์ในระบบของคุณคุณ TFVC Server Workspaces เป็นระบบประเภท "checkout-edit-checkin" ซึ่งเป็นการออกแบบโดยการตัดสินใจโดยเจตนาเพื่อลดจำนวนไฟล์ I / O ที่จำเป็นในการกำหนดสถานะของเวิร์กสเปซของคุณอย่างหนาแน่น ข้อมูลเวิร์กสเปซจะถูกบันทึกไว้บนเซิร์ฟเวอร์แทน
สิ่งนี้ทำให้พื้นที่ทำงานของเซิร์ฟเวอร์ TFVC มีขนาดใหญ่มาก codebases ขนาดใหญ่ได้อย่างมีประสิทธิภาพมาก หากคุณอยู่ในฐานรหัสแบบหลายกิกะไบต์ (เช่น Visual Studio หรือทรีซอร์สของ Windows) ไคลเอ็นต์ของคุณไม่จำเป็นต้องสแกนระบบไฟล์ในเครื่องของคุณค้นหาไฟล์ที่อาจมีการเปลี่ยนแปลงเนื่องจากสัญญาที่คุณมีกับ TFS คือคุณ จะตรวจสอบไฟล์อย่างชัดเจนเมื่อคุณต้องการแก้ไข
คุณคาดว่าจะไม่ทำเครื่องหมายไฟล์เป็นแบบเขียนอย่างเดียวและเปลี่ยนแปลงโดยไม่ต้องตรวจสอบอย่างชัดเจนก่อน หากคุณไปตามเส้นทางนี้เซิร์ฟเวอร์จะไม่ทราบว่าคุณได้ทำการเปลี่ยนแปลงไฟล์ของคุณและการดำเนินการ "รับล่าสุด" จะไม่อัปเดตพื้นที่ทำงานในพื้นที่ของคุณเพราะคุณไม่ได้บอกเซิร์ฟเวอร์ว่าคุณได้ทำ การเปลี่ยนแปลง
ถ้าคุณทำล้มล้างกลไกนี้แล้วคุณสามารถใช้tfpt reconcileคำสั่งในการตรวจสอบพื้นที่ทำงานในท้องถิ่นของคุณสำหรับการเปลี่ยนแปลงที่คุณได้ทำในประเทศ
หากคุณพบว่าตัวเองกำลังใช้ "รับรุ่นที่เฉพาะเจาะจง" และเลือกตัวเลือก "บังคับ" และ "เขียนทับ" ก็เป็นไปได้มากว่าคุณกำลังติดนิสัยการเลี่ยงการบังคับใช้ทั้งหมดที่ TFS ดำเนินการเพื่อไม่ให้ทำร้ายตัวเองและคุณควรพิจารณา TFVC Local Workspace
TFVC Local Workspaces จัดให้มีระบบการควบคุมเวอร์ชัน "edit-merge-commit" ซึ่งหมายความว่าคุณไม่จำเป็นต้องตรวจสอบไฟล์อย่างชัดเจนก่อนทำการแก้ไขและไม่ได้อยู่บนดิสก์แบบอ่านอย่างเดียว แต่คุณเพียงแค่ต้องแก้ไขไฟล์และลูกค้าของคุณจะสแกนระบบไฟล์สังเกตการเปลี่ยนแปลงและแสดงสิ่งนี้เป็นการเปลี่ยนแปลงที่รอดำเนินการ
TFVC Local Workspaces เหมาะสำหรับโครงการขนาดเล็กที่ไม่ต้องการการควบคุมสิทธิ์อย่างละเอียดเนื่องจากมันมีเวิร์กโฟลว์ที่ดีกว่า คุณไม่จำเป็นต้องออนไลน์และคุณไม่จำเป็นต้องตรวจสอบไฟล์ก่อนที่จะทำการแก้ไข
TFVC Local Workspaces เป็นค่าเริ่มต้นใน TFS 2012 และหากไม่ได้เปิดใช้งานสำหรับคุณคุณควรสอบถามผู้ดูแลเซิร์ฟเวอร์ของคุณ (องค์กรที่มีรหัสฐานขนาดใหญ่มากหรือข้อกำหนดการตรวจสอบที่เข้มงวดอาจปิดการใช้งาน TFVC Local Workspace)
การควบคุมเวอร์ชันหนังสือที่ยอดเยี่ยมของ Eric Sink โดยตัวอย่างแสดงความแตกต่างระหว่างระบบการเช็คเอาต์เช็คอินและการแก้ไขผสานและเมื่อระบบหนึ่งเหมาะสมกว่าอีกระบบหนึ่ง
หนังสือProfessional Team Foundation Server 2013ยังให้ข้อมูลที่ยอดเยี่ยมเกี่ยวกับความแตกต่างระหว่างพื้นที่ทำงานเซิร์ฟเวอร์ TFVC และพื้นที่ทำงานในท้องถิ่น TFVC เอกสารและบล็อก MSDN ยังให้ข้อมูลโดยละเอียด:
Team Foundation Server (TFS) ติดตามการคัดลอกในเครื่องในไดเรกทอรีซ่อนเร้นที่เรียกว่า $ TF เมื่อคุณออก "รับรุ่นล่าสุด" TFS จะมองเข้าไปในโฟลเดอร์นี้และดูสภาพอากาศว่ามีสำเนาล่าสุดหรือไม่ หากเป็นเช่นนั้นจะไม่ดาวน์โหลดสำเนาล่าสุด ไม่สำคัญว่าคุณมีไฟล์ต้นฉบับหรือไม่ ในความเป็นจริงคุณอาจลบทั้งโฟลเดอร์ (ในกรณีของฉัน) และ TFS จะไม่ดึงสำเนาล่าสุดเพราะมันไม่ได้มองเข้าไปในไฟล์จริง แต่เป็นไดเรกทอรีที่ซ่อนอยู่ซึ่งมันบันทึกการเปลี่ยนแปลง ข้อบกพร่องในการออกแบบนี้คือสิ่งที่ทำนอกระบบจะไม่ถูกบันทึกใน TFS ตัวอย่างเช่นคุณอาจเข้าสู่ Windows explorer ลบโฟลเดอร์หรือไฟล์และ TFS จะไม่รู้จัก มันจะตาบอดอย่างสิ้นเชิง อย่างน้อยฉันก็คาดหวังว่า Windows จะไม่ยอมให้คุณลบไฟล์นี้
วิธีหนึ่งในการบังคับใช้สำเนาล่าสุดคือการลบโฟลเดอร์ $ TF ที่ซ่อนด้วยตนเอง ในการทำเช่นนั้นให้ไปที่พรอมต์คำสั่งและนำทางไปยังโฟลเดอร์รูทที่คุณทำโปรเจ็กต์และเช็คเอาท์คำสั่งนี้
rd/s $tf // remove $TF folder and everything inside it
หากคุณต้องการตรวจสอบโฟลเดอร์ที่ซ่อนอยู่คุณสามารถทำได้โดยใช้
dir /ah // display hidden files and folders
หมายเหตุ: ถ้าคุณทำมัน tf จะคิดว่าคุณไม่มีสำเนาโลคัลแม้ว่าคุณจะมีมันอยู่ในไฟล์และมันจะซิงค์ทุกอย่างอีกครั้ง
ข้อควรระวัง: ใช้วิธีนี้ในความเสี่ยงของคุณเอง โปรดอย่าใช้มันกับงานสำคัญ
"รับรุ่นล่าสุด" โดยค่าเริ่มต้นจะดาวน์โหลดเฉพาะไฟล์ที่มีการเปลี่ยนแปลงบนเซิร์ฟเวอร์ตั้งแต่ครั้งสุดท้ายที่คุณเรียกใช้ "รับรุ่นล่าสุด" TFS ติดตามไฟล์ที่คุณดาวน์โหลดดังนั้นจึงไม่ต้องเสียเวลาดาวน์โหลดไฟล์รุ่นเดียวกันอีกเลย หากคุณกำลังแก้ไขไฟล์ที่อยู่นอก Visual Studio สิ่งนี้อาจทำให้เกิดปัญหาความมั่นคงที่ดูเหมือนว่าคุณเห็น
น่าเสียดายที่มีข้อบกพร่องอย่างน้อยหนึ่งข้อใน TFS 2008 เนื่องจากปัญหานี้ทำให้เกิดปัญหาบนเครื่องของนักพัฒนาซอฟต์แวร์และสร้างเซิร์ฟเวอร์ที่ฉันทำงานด้วยเช่นกัน
ฉันสามารถทำได้รับล่าสุดฉันสามารถดูในรายการประวัติของโครงการที่มีความมุ่งมั่นหลังจากที่ฉันได้รับล่าสุดฉันไม่ได้สัมผัสไฟล์บนดิสก์ในทางใดทางหนึ่ง แต่หลังจากฟังก์ชั่น "รับล่าสุด" มี เสร็จสมบูรณ์เมื่อฉันตรวจสอบแท็บ TFS บางไฟล์ยังคงบอกว่ามันไม่ใช่เวอร์ชันล่าสุด
เห็นได้ชัดว่า TFS สามารถตรวจสอบได้ว่าฉันมีไฟล์เก่าอยู่ภายในเครื่องเนื่องจากรายการระบุว่าเป็นเช่นนั้น แต่ Get ล่าสุดล้มเหลวในการทำเช่นนั้นรับเวอร์ชันล่าสุด ถ้าฉันทำสิ่งที่คุณทำให้ใช้รุ่นที่เฉพาะเจาะจงและทำเครื่องหมายที่ช่องทำเครื่องหมายสองช่องที่ด้านล่างของกล่องโต้ตอบจากนั้นไฟล์จะถูกเรียกคืน
เราเปลี่ยนเซิร์ฟเวอร์การสร้างของเราเพื่อใช้ฟังก์ชั่น Get Specific รุ่นแทนเสมอดังนั้นตอนนี้ส่วนนี้ใช้งานได้ แต่เนื่องจาก build server (TeamCity) ของเรายังอาศัยการตรวจสอบว่ามีการเปลี่ยนแปลงไฟล์เพื่อที่จะเริ่มสร้างหรือไม่ บางครั้งมันกลายเป็นโหมด "ไม่มีอะไรเปลี่ยนแปลงไม่มีอะไรให้ดูที่นี่ย้ายไปที่โหมด" และไม่ทำอะไรเลยจนกว่าเราจะบังคับให้ใช้การกำหนดค่าการสร้าง
โปรดทราบว่าฉันเคยประสบปัญหานี้กับเครื่องที่ไม่เคยสัมผัสยกเว้นได้รับ + รุ่นล่าสุดทั้งสองแบบด้วยตนเองดังนั้นจึงไม่มีการดัดแปลงไฟล์ มันเป็นเพียงแค่ TFS เริ่มสับสน
มีอยู่ครั้งหนึ่งที่ถูกครอบตัดฉันตรวจสอบแล้วว่าไฟล์บนดิสก์นั้นเป็นเลขฐานสองที่เหมือนกันกับรุ่นที่ดึงมาก่อนหน้านี้ดังนั้นจึงไม่มีการดัดแปลงแก้ไขด้วยตนเองสำหรับไฟล์
นอกจากนี้ฉันล้มเหลวในการดูว่า TFS สามารถ "รู้" ว่ามีการเปลี่ยนแปลงไฟล์บนดิสก์หรือไม่โดยไม่ได้ดูเนื้อหาจริง ๆ หากส่วนหนึ่งของ TFS เห็นว่าไฟล์นั้นไม่ใช่รุ่นล่าสุดจริง ๆ แล้วเวอร์ชั่นล่าสุดควรจะสามารถรับเวอร์ชันล่าสุดได้ สิ่งนี้อ้างอิงถึงความคิดเห็นต่อคำตอบอื่น ๆ ที่นี่
อาจเป็นเพราะคุณลงชื่อเข้าใช้ TFS ในฐานะผู้ใช้รายเดียวกันและชื่อพื้นที่ทำงาน (ตามชื่อเครื่องโดยค่าเริ่มต้น) ก็เหมือนกันดังนั้น TFS คิดว่าคุณอยู่ในเครื่องเดียวกันและพื้นที่ทำงานเดียวกันดังนั้นคุณจึงมีเวอร์ชันล่าสุดของ ไฟล์ดังนั้นมันจะไม่ได้รับพวกเขาสำหรับคุณ
ลองเปลี่ยนชื่อเครื่องของคุณและสร้างพื้นที่ทำงานใหม่เป็นเครื่องใหม่
ฉันมีปัญหาเดียวกันกับ Visual Studio 2012 ไม่ว่าฉันจะทำอะไรก็ไม่ได้รับรหัสจากแหล่งควบคุม TFS
ในกรณีของฉันสาเหตุคือการแมปโฟลเดอร์ + โฟลเดอร์ย่อยจากตัวควบคุมแหล่งข้อมูลแยกจากกัน แต่กับโครงสร้างเดียวกันใน HD ท้องถิ่นของฉัน
วิธีแก้ไขคือการลบการแมปโฟลเดอร์ย่อยโดยใช้หน้าต่าง "จัดการพื้นที่ทำงาน"
ปัญหาส่วนใหญ่ที่ฉันได้เห็นกับนักพัฒนาบ่นว่า Get ล่าสุดไม่ได้ทำในสิ่งที่พวกเขาคาดหวังจากข้อเท็จจริงที่ว่าพวกเขากำลังทำงานรับล่าสุดจาก Solution Explorer มากกว่าจาก Explorer ควบคุมแหล่งที่มา Solution Explorer จะรับเฉพาะไฟล์ที่เป็นส่วนหนึ่งของโซลูชันและจะไม่สนใจสิ่งใด ๆ ที่ไฟล์ภายในโซลูชันต้องการและเป็นส่วนหนึ่งของการควบคุมแหล่งที่มาในขณะที่ Source Control explorer จะเปรียบเทียบพื้นที่ทำงานในพื้นที่ของคุณกับที่เก็บบนเซิร์ฟเวอร์ ต้องการ.
เมื่อฉันพบปัญหานี้โดยไม่ได้รับรุ่นล่าสุดและรุ่นไม่ตรงกันฉันจะ "รับรุ่นที่เฉพาะเจาะจง" ตั้งเป็นเซ็ตการแก้ไขและใส่ใน 1 จากนั้นจะลบไฟล์ทั้งหมดออกจากพื้นที่ทำงานในพื้นที่ของคุณ (สำหรับโครงการโฟลเดอร์ ไฟล์ ฯลฯ ) และจะมีการอัปเดต TFS เพื่อให้คุณรู้ว่าตอนนี้ไม่มีเวอร์ชั่นดาวน์โหลด จากนั้นคุณสามารถทำ "รับล่าสุด" และวิโอล่าคุณจะได้รับล่าสุด
มันอาจเกิดขึ้นเมื่อคุณใช้ TFS จากเครื่องที่แตกต่างกันสองเครื่องที่มีบัญชีเดียวกันถ้าเป็นเช่นนั้นคุณควรเปรียบเทียบเพื่อดูไฟล์ที่มีการเปลี่ยนแปลงและตรวจสอบพวกเขาจากนั้นรับล่าสุดแล้วเลิกทำการเปลี่ยนแปลงที่รอดำเนินการ
สิ่งนี้ใช้ได้กับฉัน:
1. ออกจาก Visual Studio
2. เปิดหน้าต่างคำสั่งและนำทางไปยังโฟลเดอร์: "% localappdata% \ Local \ Microsoft \ Team Foundation \"
3. นำทางไปยังโฟลเดอร์ย่อยสำหรับทุกรุ่นและลบโฟลเดอร์ย่อย "cache" และเนื้อหา
4. เริ่ม Visual Studio ใหม่และเชื่อมต่อกับ TFS
5. ทดสอบการรับรุ่นล่าสุด
เพียงแค่ต้องการเพิ่ม TFS MSBuild ไม่รองรับอักขระพิเศษในโฟลเดอร์เช่น "@"
ฉันมีประสบการณ์ในอดีตที่หนึ่งในโฟลเดอร์โครงการของเราชื่อเป็น External @ Project1
เราสร้างคำนิยาม TFS Build เพื่อเรียกใช้ไฟล์ msbuild ที่กำหนดเองจากนั้นโฟลเดอร์พื้นที่ทำงานไม่ได้รับเนื้อหาใด ๆ ที่โฟลเดอร์ External @ Project1 ในระหว่างที่เวิร์กสเปซได้รับล่าสุด ดูเหมือนว่า tfs get จะล้มเหลว แต่ไม่แสดงข้อผิดพลาดใด ๆ
หลังจากการลองผิดลองถูกและเปลี่ยนชื่อโฟลเดอร์เป็น _Project1 voila เราได้ไฟล์ในโฟลเดอร์ (_Project1)
เครื่องมือ: เครื่องมือไฟฟ้า TFS
ที่มา: http://dennymichael.net/2013/03/19/tfs-scorch/
คำสั่ง: tfpt scorch / recursive / ลบ C: \ LocationOfWorkspaceOrFolder
จะเป็นการเปิดกล่องโต้ตอบที่จะขอให้คุณลบหรือดาวน์โหลดรายการไฟล์ เลือกหรือยกเลิกการเลือกไฟล์ตามนั้นและกดตกลง ลักษณะที่ปรากฏในกริด (กล่องกาเครื่องหมาย, ชื่อไฟล์, FileAction, FilePath)
สาเหตุ: TFS จะเปรียบเทียบกับรายการในพื้นที่ทำงานเท่านั้น หากมีการเปลี่ยนแปลงนอกพื้นที่ทำงาน TFS จะไม่รับรู้ถึงสิ่งเหล่านี้
หวังว่าใครบางคนพบว่ามีประโยชน์นี้ ฉันพบโพสต์นี้หลังจากลบโฟลเดอร์จำนวนหนึ่งในตำแหน่งที่ตั้งที่แตกต่างกัน การจำไม่ได้ว่าโฟลเดอร์ใดที่ฉันลบไปนั้นยกเว้นตัวเลือก Force Get / Replace ปกติที่ฉันจะใช้
ในกรณีของฉันรับรุ่นที่เฉพาะเจาะจงแม้ตรวจสอบทั้งช่องทำเครื่องหมายและเลิกทำการเปลี่ยนแปลงที่ค้างอยู่ทั้งหมดไม่ทำงาน
ตรวจสอบพื้นที่ทำงาน แก้ไขพื้นที่ทำงานปัจจุบัน ตรวจสอบเส้นทางทั้งหมด เส้นทางโซลูชันไม่ถูกต้องและชี้ไปที่โฟลเดอร์ที่ถูกลบ
แก้ไขพา ธ และรับการทำงานล่าสุด
ไปด้วยการคลิกขวา: ขั้นสูง> รับเฉพาะรุ่น เลือก "รุ่น Letest" และตอนนี้สำคัญทำเครื่องหมายสองเช็ค:

การตรวจสอบคือ:
เขียนทับไฟล์ที่เขียนได้ซึ่งไม่ได้ตรวจสอบ
เขียนทับไฟล์ทั้งหมดแม้ว่าเวอร์ชันโลคัลตรงกับเวอร์ชันที่ระบุ