TFS: คุณจะเลิกทำการชำระเงินของไฟล์ที่ไม่ได้แก้ไขในไฟล์แบตช์ได้อย่างไร


172

เราใช้ไฟล์แบตช์เพื่อสร้างรหัสและจะตรวจสอบไฟล์ที่สร้างจาก Team Foundation Server (TFS) โดยอัตโนมัติเพื่อให้สามารถสร้างใหม่ได้ ไฟล์เหล่านี้ส่วนใหญ่ไม่ได้ถูกแก้ไข แต่ตัวสร้างไม่ทราบล่วงหน้า

คำสั่ง "tfs undo" เลิกทำการเช็คเอาต์ แต่จะแจ้งให้หากมีการแก้ไข (ซึ่งเราไม่ต้องการจะทำ) นอกจากนี้เรายังไม่ต้องการตรวจสอบไฟล์ที่สร้างขึ้นทันที

มีคำสั่ง (หรือชุดคำสั่ง) เพื่อยกเลิกการเช็กเอาต์ไฟล์ที่ไม่ได้แก้ไขทั้งหมดโดยไม่แจ้งผู้ใช้หรือไม่


โปรดทราบว่าการเลิกทำการเปลี่ยนแปลงทั้งหมดด้วยตนเองด้วยความคาดหวังในการเลือก "ไม่เป็นทั้งหมด" เมื่อได้รับแจ้งเกี่ยวกับไฟล์ที่มีการเปลี่ยนแปลงจะทำงานไม่ถูกต้องเนื่องจากจะยกเลิกADDการเปลี่ยนแปลงโดยไม่แจ้งให้ (ดูคำตอบของ Ray )
Elaskanator

คำตอบ:


202

ดูคำสั่ง Undo Unchanged ของเครื่องมือไฟฟ้าเซิร์ฟเวอร์มูลนิธิทีมสิงหาคม 2554

c:\myProject> tfpt uu . /noget /recursive

ขอบคุณ Matt Florence สำหรับการอัพเดทลิงค์

ขอบคุณเรย์ Vega สำหรับไวยากรณ์ที่เกิดขึ้นจริง


1
สิ่งนี้ควรได้รับการแก้ไข / ผสานเพื่อให้มีข้อมูลการใช้งานซึ่งเป็นส่วนหนึ่งของเนื้อหาคำตอบ
mcw

4
คุณต้องการอ่านโพสต์นี้จริงๆ: aaubry.net/undo-checkout-on-unchanged-files-tfs.html
Byron Whitlock

17
อืมมีคนบางคนที่เกือบทุกคนทำวันละหลายครั้ง: "ให้วางไว้ในตัวติดตั้งแยกต่างหากที่เรียกว่า Power Tools" ... ถอนหายใจ
vidstige

1
@ Mike Chaliy คุณจะคิด ตอนนี้ฉันลอง TFS แล้วและกำลังค้นหาวิธีที่จะทำและจบลงที่นี่
vidstige

3
มันไม่ทำงานหากการเปลี่ยนแปลงของคุณถูกผสาน ดูเหมือนว่า tfpt uu จะถือว่าการผสานนั้นเป็นการเปลี่ยนแปลงจริงเสมอแม้ว่าจะไม่มีการเปลี่ยนแปลงไฟล์และไม่มีตัวเลือกในการพลิกพฤติกรรมดังกล่าว มันก็โอเคเป็นพฤติกรรมเริ่มต้น แต่บางครั้งก็ไม่ใช่สิ่งที่คุณต้องการ
user1164178

124

ติดตั้งเครื่องมือรากฐานเซิร์ฟเวอร์ทีมและเรียกใช้ต่อไปนี้จากบรรทัดคำสั่งโดยใช้ tfpt.exe ที่รูทของไดเรกทอรีพื้นที่ทำงานของโครงการของคุณ:

c:\myProject> tfpt uu . /noget /recursive

รวมทั้ง/nogetขอแนะนำเพราะมันจะช่วยป้องกันการบังคับ 'ได้รับล่าสุด' ของไฟล์ทั้งหมดของโครงการซึ่งขึ้นอยู่กับจำนวนทั้งหมดสามารถใช้เวลานานมาก


12
นี่ควรเป็นคำตอบที่ได้รับการยอมรับมีรายละเอียดที่เกี่ยวข้องทั้งหมด (ตามที่พิสูจน์แล้วโดยคะแนนที่สูงกว่า)
rikoe

7
เย็น. นอกจากนี้ทำไมไม่เพิ่มสิ่งนี้เป็น 'เครื่องมือภายนอก' ถาวรไปยัง Visual Studio ใช้สิ่งนี้เป็นตัวอย่าง: blog.kurtschindler.net/post/…คำสั่ง: [การติดตั้งของคุณ] \ TFPT.EXE อาร์กิวเมนต์: uu / noget / recursive ไดเรกทอรีเริ่มต้น: $ (SolutionDir)
rohancragg

12
คำถามระบุว่าการดำเนินการนี้โดยไม่แจ้งให้ทราบแต่ดูเหมือนว่าไม่มีคำตอบใด ๆ หากคุณต้องการสิ่งนี้เพิ่มเติม/ nopromptเป็นตัวเลือกที่คุณต้องการ เอกสาร PowerTools หายไป! มันแสดงรายการตัวเลือกนี้สำหรับคำสั่งบางอย่าง แต่ไม่ใช่คำสั่งนี้ (UU) ระวัง!
Johnny Kauffman

1
@ user20358 ไม่cdว่าไดเรกทอรีพื้นที่ทำงานของคุณคืออะไร (ตัวอย่างเช่นฉันเป็นc:\myProject) หรือรวมไว้อย่างชัดเจนหลังจากนั้นuu(แทนที่ระยะเวลา.ด้วย)
Ray

สิ่งนี้มีสวิตช์บังคับใช้เช่น / Y หรือ / force หรือไม่ ฉันถูกถามอยู่เสมอว่าต้องการเลิกทำจริง ๆ หรือไม่และฉันต้องการให้เป็นแบบอัตโนมัติ วาง / Y ที่นั่น แต่บอกฉันตัวเลือก Y ต้องการค่า
Squirrelkiller

118

ขอบคุณ @ ไมค์ & @ray

ฉันต้องการทำให้ง่ายขึ้น

ใน VS ที่เมนูเครื่องมือคลิกที่ "เครื่องมือภายนอก"

เครื่องมือภายนอก

คลิกเพิ่ม

ป้อนชื่อ

คำสั่ง: tfpt.exe

อาร์กิวเมนต์: uu / noget / recursive

ไดเรกทอรีเริ่มต้น: [คุณสามารถเลือกได้จากปุ่มลูกศร]

เลิกทำไม่เปลี่ยนแปลงในโซลูชัน

เลิกทำไม่เปลี่ยนแปลงในโครงการ

คำสั่งใหม่สองคำสั่งถูกเพิ่มลงในเมนูเครื่องมือ

ใช้เมื่อจำเป็น

สนุก,

Ofir


3
เด็ดมาก คุณสามารถไปอีกขั้นหนึ่งได้เช่นกันและเพิ่มทางลัด สังเกตว่าคำสั่งที่คุณเพิ่มลงไปนั้นอยู่ที่ใด (เช่นอาจเป็นคำสั่งที่สี่) จากนั้นไปที่เครื่องมือ -> ตัวเลือก -> สภาพแวดล้อม -> แป้นพิมพ์ -> และพิมพ์ใน 'แสดงคำสั่งที่มี' กล่องข้อความ "เครื่องมือภายนอก" และกำหนดทางลัด ตัวอย่างเช่นฉันเลือก Tools.ExternalCommand4 เนื่องจากคำสั่งเลิกทำที่เพิ่มใหม่ของฉันคืออันที่สี่ ฉันกำหนดปุ่มลัด Ctrl + Alt + U, Ctrl + Alt + U
Mario

1
เราจะขอให้มีการอัพเดทเวอร์ชั่นนี้ได้ไหม? หากพบ tf.exe แต่คำสั่ง uu คืออะไร มันบอกฉันคำสั่งที่ไม่รู้จัก: uu ขอบคุณสำหรับความช่วยเหลือ
Shay

1
@Shay: เหมาะสำหรับฉันใน VS2015 โดยติดตั้งเครื่องมือไฟฟ้า TFS ล่าสุด
Igor Malin

27
  1. คลิกขวาที่โครงการของคุณ
  2. เลือกเลิกทำการเช็คเอาต์จากนั้นคลิกตกลงหรือมีการยืนยันอะไรก็ตามที่เหลือ ...
  3. จากนั้นในขณะที่เลิกทำการชำระเงินสำหรับทุกไฟล์ที่มีการเปลี่ยนแปลงจริงจะมีข้อความแจ้งให้คุณยืนยันการตรวจสอบไฟล์นั้น ... เพียงคลิก "ไม่ไปทั้งหมด"

Visual studio จะรู้ว่าไฟล์ที่เช็คเอาต์นั้นมีการเปลี่ยนแปลงหรือไม่

คำเตือน:วิธีการนี้จะลบไฟล์ใหม่เช่นไฟล์ที่ยังไม่ได้เช็คอินใน TFS หากคุณต้องการเก็บไฟล์เหล่านี้ให้แยกไฟล์เหล่านั้นออกจากชุดไฟล์ที่คุณ "เลิกทำ"


14
Be aware that this method also removes added files that are not yet checked in from TFS.... ใช่มันเป็นสิ่งที่ตัดสิทธิทันที
shortstuffsushi

1
มันใช้งานได้สำหรับสาขาที่ไม่มีฐานของฉันที่ผสาน ขอบคุณ โดยปกติในกรณีนี้ VS ทำเครื่องหมายไฟล์ทั้งหมดในโซลูชันตามที่มีการเปลี่ยนแปลง
KoViMa

2
นี่เป็นนรกเมื่อนักเก็ตทำการชำระเงินสำหรับไฟล์ 10,000 ไฟล์ที่ไม่จำเป็นต้องได้รับการอัพเดต
Ievgen Naida

13

อัปเดตคำถามนี้ด้วยคำตอบเมื่อทำงานกับTFS2017และVS2017 / VS2019เท่านั้น

ไม่มีเครื่องมือไฟฟ้าสำหรับ TFS 2017 และเครื่องมือเก่าไม่สามารถทำงานร่วมกันได้ แต่ดูเหมือนว่าฟังก์ชั่นส่วนใหญ่ได้ถูกย้ายไปที่ VS2017 หรือปลั๊กอิน (ดูด้านล่าง)

Visual Studio 2017/2019 ส่วนขยาย

การกระทำบางอย่างเช่นการเลิกทำการเปลี่ยนแปลงไฟล์ได้ย้ายไปที่

ส่วนขยายสำหรับ VS2017

ส่วนขยายสำหรับ VS2019

ตำแหน่งปุ่ม "เลิกทำไม่เปลี่ยนแปลง":

เลิกทำตำแหน่งปุ่มไม่เปลี่ยนแปลง

บั๊กที่รู้จัก

คุณต้องเปิด 'Explorer การควบคุมแหล่งที่มา' (และเปิดทิ้งไว้) เพื่อให้ 'Undo Unchanged' แสดงขึ้นในเมนูการกระทำของมุมมองการเปลี่ยนแปลงที่รอดำเนินการ รายงานที่นี่

Windows Shell Integration Extension

นอกจากนี้คุณยังสามารถตั้งค่าการรวมเชลล์ของ Windows ผ่านตัวติดตั้งแยกต่างหากซึ่งไม่ได้เชื่อมโยงกับเครื่องมือไฟฟ้า TFS อีกต่อไป

การรวม windows shell ไม่ทำงานเหมือนกับ powertools มาก่อน แต่การกระทำที่สำคัญที่สุดสำหรับฉัน


ฉันสังเกตเห็นในคำถามว่าพวกเขาต้องการสคริปต์เพราะฉันไม่มีทางออกฉันกลัว
Schwarzie2478

1
ฉันไม่พบตัวเลือก "เลิกทำไม่เปลี่ยนแปลง" ใน VS2017 หลังจากติดตั้งส่วนขยายที่เชื่อมโยงแล้ว ฉันพลาดอะไรไปหรือเปล่า?
Erzékiel

ฉันไม่ได้ใช้มันมากนัก เมื่อฉันใช้เพื่อทดสอบสำหรับลูกค้าของฉันฉันต้องคลิกไปที่ Team Explorer และตรวจสอบให้แน่ใจว่ามีการเปลี่ยนแปลงเพื่อเลิกทำ เป็นไปได้ว่าจะปรากฏเฉพาะเมื่อคุณมีการเปลี่ยนแปลงที่รอดำเนินการรอการยอมรับว่าตัวเลือกนี้ปรากฏขึ้น (หรือมีการเปลี่ยนแปลงสาขาเดียวเท่านั้น) ...
Schwarzie2478

2
@ Erzékielตัวเลือกจะปรากฏเฉพาะเมื่อ Solution Explorer เปิดและพร้อม
MatrixRonny

1
ส่วนขยายนี้ทำงานบางครั้งและการปรากฏตัวของมันจะเชื่อมโยงกับการมี TFS มาควบคุม Explorer ที่เปิดและไม่ได้แก้ปัญหา Explorer (เป็นบางส่วนออกมาชี้ผิด) - ไม่ผสมขึ้นทั้งสองหน้าต่างการควบคุมที่แตกต่างกัน อย่างไรก็ตาม; เมื่อฉันพูดบางครั้งมันเป็นเพราะมันมาและไป ตอนนี้ฉันไม่มีแล้วฉันก็ทำมาหนึ่งเดือนแล้ว มันเป็นรถเล็ก ๆ น้อย ๆ และฉันกลัวว่าส่วนขยายอื่น ๆ คือผู้ร้ายเช่น Resharper และไม่ชอบ
คริสเตียน

8

หากคุณเพียงแค่ตรวจสอบไฟล์ทั้งหมดกลับมาอีกครั้งที่คุณเช็คเอาต์ TFS นั้นฉลาดพอที่จะคิดได้ว่าไฟล์ใดเปลี่ยนแปลงบ้างและรวมไว้ในเซ็ตการแก้ไขที่บันทึกไว้บนเซิร์ฟเวอร์เท่านั้น

TFS ทำได้โดยการเปรียบเทียบ MD5 hash ของเนื้อหาไฟล์ก่อนและหลังเช็คอิน

นี่คือทั้งหมดที่สมมติว่ากระบวนการสร้างของคุณกำลังปรับปรุงชุดไฟล์เดียวกันหมดจดนั่นคือคุณจะไม่มีกรณีที่ไฟล์ที่สร้างขึ้นในรุ่นก่อนหน้าไม่จำเป็นต้องใช้ในรุ่นต่อไป (เช่นคุณต้องการจะลบลบ) สำหรับไฟล์นั้น) หรือว่าชื่อการเปลี่ยนไฟล์

หากกระบวนการของคุณอาจต้องการลบไฟล์ทางออกที่ดีที่สุดของคุณอาจดูคำสั่งTeam Foundation Power Tools ( tfpt ) และใช้คำสั่ง tfpt ออนไลน์ที่จะตรวจสอบไฟล์ที่มีการเปลี่ยนแปลงเท่านั้นและจะฉลาดพอที่จะ pend ลบสำหรับไฟล์ใด ๆ ที่ไม่ต้องการอีกต่อไปหรือเปลี่ยนชื่อแล้วเพิ่ม pend

โชคดี,

นกนางแอ่น


6
ขอบคุณสำหรับสิ่งนั้นอย่างไรก็ตามเราไม่ต้องการเช็คอินไฟล์ที่ถูกแก้ไขในเวลานั้น ไม่ควรเช็กอินที่ถูกแก้ไขจนกว่าคุณลักษณะจะเสร็จ แต่ควรลบรายการที่ไม่ได้แก้ไขออกเพื่อให้ dev สามารถตรวจสอบการเปลี่ยนแปลงได้
Robert Wagner

@RobertWagner หากคุณมีบิลด์ gated คุณสามารถยกเลิก (หากไม่ได้ยกเลิกการตรวจจับไฟล์ที่เหมือนกัน) เมื่อคุณได้รับการแจ้งเตือนป๊อปอัพว่าการเปลี่ยนแปลงจะต้องสร้างขึ้นก่อน
Elaskanator

6

ระวังว่าการยกเลิก TFS จะไม่คืนค่า "แก้ไขวันที่" ของระบบไฟล์ สิ่งนี้น่าผิดหวังมากโดยเฉพาะถ้าคุณใช้เครื่องมือเช่น robocopy เพื่อซิงค์เครื่องระยะไกล แม้หลังจากที่คุณเลิกทำการเช็คเอาท์หากคุณบันทึกไฟล์เพื่ออัปเดตค่า "แก้ไขวันที่" ค่าที่อัปเดตจะยังคงอยู่แม้ว่าจะทำการเลิกทำการเช็คเอาต์ก็ตาม


1
ใช้ robocopy หรือ VCS การใช้ส่วนผสมจะทำให้เกิดความไม่สอดคล้องกันอยู่เสมอ จะเป็นการดีที่จะเติมแต่ละเครื่องจาก VCS โดยตรง
Richard

4

มีจุดสองสามข้อเกี่ยวกับตัวเลือก uu สำหรับ tfpt (แนะนำในคำตอบส่วนใหญ่) ที่ไม่ชัดเจนสำหรับฉันในตอนแรก ประการแรกนี่คือวิธีใช้บรรทัดคำสั่งที่สามารถเข้าถึงได้ด้วยคำสั่งtfpt uu /?

เลิกทำการเปลี่ยนแปลงที่ค้างอยู่ซ้ำซ้อน หากสถานะของรายการที่มีการเปลี่ยนแปลงที่รอดำเนินการเหมือนกับในเซิร์ฟเวอร์แสดงว่าการเปลี่ยนแปลงนั้นถูกยกเลิก

การใช้งาน: tfpt uu [/ changeset: changesetnum] [/ recursive] [/ noget] [filespec ... ]

  • / changeset เปรียบเทียบเวิร์กสเปซกับสถานะรายการที่เวอร์ชันเซ็ตการแก้ไขที่ระบุแทนเวอร์ชันล่าสุด
  • filespec ... ตรวจสอบเฉพาะ filespecs ที่ระบุเพื่อดูการเปลี่ยนแปลงที่ซ้ำซ้อน
  • / recursive ตรวจสอบ filespecs ที่ระบุด้วยการเรียกซ้ำทั้งหมด
  • / noget อย่าเรียกใช้ก่อนตรวจสอบ

ตัวเลือก / changeset อาจไม่สามารถใช้กับ filespecs หรือ / recursive

ตอนนี้ให้ฉันทำลายคำสั่งที่แนะนำในคำตอบอื่น ๆ

tfpt uu . /noget /recursive
  • tfpt uu ระบุว่าเราต้องการใช้คำสั่ง 'Undo Unchanged'
  • . หมายถึง (ฉันเดา) ว่าควรใช้ไดเรกทอรีการทำงานปัจจุบันเป็นตัวกรองข้อมูล
  • /noget ตรวจสอบให้แน่ใจว่าไม่ได้รับการเรียก 'รับรุ่นล่าสุด' ก่อนที่จะทำการยกเลิกไฟล์ที่ไม่เปลี่ยนแปลง
  • /recursiveตรวจสอบให้แน่ใจว่าไม่ใช่แค่ filespec เท่านั้นที่จะได้รับการพิจารณา แต่เป็นโฟลเดอร์ย่อยและไฟล์ย่อยทั้งหมด สิ่งนี้ดูเหมือนว่าจะขึ้นอยู่กับ filespec - หากไม่มีให้ไว้พื้นที่ทำงานทั้งหมดจะถูกประมวลผล

ดังนั้นมีบางสิ่งที่ควรทราบที่นี่เกี่ยวกับคำสั่งจากด้านบน ...

  • มันขึ้นอยู่กับไดเรกทอรีทำงาน
  • มันไม่ได้ประมวลผลพื้นที่ทำงานทั้งหมด

ฉันพบว่าคำสั่งต่อไปนี้ทำงานได้ดีที่สุดสำหรับฉัน - มันจะประมวลผลพื้นที่ทำงานทั้งหมด

tfpt uu /noget

โปรดทราบว่ามันยังคงขึ้นอยู่กับไดเรกทอรีการทำงานใน tfpt ที่ใช้มันเพื่อกำหนดพื้นที่ทำงานที่ควรประมวลผล แต่ตราบใดที่คุณระบุเส้นทางไปยังไฟล์หรือโฟลเดอร์ภายในพื้นที่ทำงานคุณก็พร้อมที่จะไป


3

ฉันเห็นแนวทางของ Ray LionFang ด้านบน ไม่สามารถแสดงความคิดเห็นได้เนื่องจากฉันไม่มีตัวแทน ในขณะที่ฉันชอบวิธีการนี้เนื่องจากไม่มีการเปลี่ยนแปลงเครื่องมือและอื่น ๆ ........

  1. คลิกขวาที่โครงการของคุณ
  2. เลือกเลิกทำการเช็คเอาต์จากนั้นคลิกตกลงหรืออะไรก็ได้ที่ยืนยัน ...
  3. จากนั้นในขณะที่เลิกทำการชำระเงินสำหรับทุกไฟล์ที่มีการเปลี่ยนแปลงจริงจะมีข้อความแจ้งให้คุณยืนยันการตรวจสอบไฟล์นั้น ... เพียงคลิก "ไม่ไปทั้งหมด"
  4. Visual studio จะรู้ว่าไฟล์ที่เช็คเอาต์นั้นมีการเปลี่ยนแปลงหรือไม่ โปรดทราบว่าวิธีการนี้จะลบไฟล์ที่เพิ่มซึ่งยังไม่ได้เช็คอินจาก TFS ...

....... มีปัญหากับวิธีการดังกล่าวในการกดปุ่ม "ไม่ถึงทั้งหมด" เก็บไฟล์บางไฟล์ที่ไม่ได้แก้ไข ดูเหมือนว่าจะทำอะไรบางอย่างเช่นการเลิกทำไฟล์ที่ไม่ได้ทำการแก้ไขจนกว่าจะเจอไฟล์แรกที่ถูกแก้ไขจริงและจากนั้นจะไม่สนใจไฟล์ส่วนที่เหลือที่ยังไม่ได้แก้ไขหากมันเหมาะสม ฉันเคยเห็นเอฟเฟกต์นี้นาน ๆ ครั้ง

การหลีกเลี่ยงที่อาจเกิดขึ้นคือทำตามกระบวนการข้างต้น แต่แทนที่จะกดปุ่ม "ไม่ถึงทั้งหมด" ให้กด "ไม่" สำหรับแต่ละไฟล์ เนื่องจากอาจใช้เวลาสักครู่ขึ้นอยู่กับจำนวนไฟล์ที่คุณใช้งานสิ่งที่ฉันทำตามปกติคือกด "ALT + N" ค้างไว้และมันก็เพิ่มความเร็วในไฟล์ทั้งหมดขณะที่ยกเลิกการแก้ไขไฟล์ที่ไม่ได้แก้ไขทั้งหมด


โปรดได้รับคำแนะนำเนื่องจากไม่สามารถเน้นได้เพียงพอ ไฟล์ที่เพิ่มเข้ามาใหม่ในโครงการจะถูกลบด้วยวิธีการนี้ สิ่งนี้ถูกกล่าวถึงบนเซิร์ฟเวอร์ของคำตอบอื่นเช่นกัน
คริสเตียน

-20

เท่าที่ฉันเข้าใจใน TFS ถ้าคุณเช็คเอาต์โปรเจ็กต์ทีมโปรเจ็กต์ทั้งหมดจะถูกเช็กเอาต์และคุณไม่สามารถควบคุมไฟล์ที่จะถูกลบ หากคุณต้องการป้องกันการเช็คอินของไฟล์บางไฟล์คุณสามารถล็อคได้

ที่ทำงานเราทุกคนเกลียด TFS


1
เราสามารถตรวจสอบแต่ละไฟล์และล็อคมันจะไม่ช่วยให้นักพัฒนาที่จะตรวจสอบพวกเขาใน.
โรเบิร์ตวากเนอร์

5
กำลังจะลงคะแนนเสียง แต่ "ที่ทำงานเราทุกคนเกลียด TFS" บันทึกไว้
James
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.