สมมติว่านักพัฒนาบางคนในทีมของฉันระงับการเปลี่ยนแปลงของเขาที่เขาทำในสาขา A และฉันกำลังทำงานในสาขา B ฉันจะยกเลิกการเปลี่ยนแปลงในสาขา B ได้หรือไม่ (โดย GUI หรือพร้อมรับคำสั่ง)
สมมติว่านักพัฒนาบางคนในทีมของฉันระงับการเปลี่ยนแปลงของเขาที่เขาทำในสาขา A และฉันกำลังทำงานในสาขา B ฉันจะยกเลิกการเปลี่ยนแปลงในสาขา B ได้หรือไม่ (โดย GUI หรือพร้อมรับคำสั่ง)
คำตอบ:
ภาพเครื่องมือ Studio พลังงานควรจะปล่อยให้คุณทำเช่นนี้
C:\src\2\Merlin\Main>tfpt unshelve /?
tfpt unshelve - Unshelve into workspace with pending changes
Allows a shelveset to be unshelved into a workspace with pending changes.
Merges content between local and shelved changes. Allows migration of shelved
changes from one branch into another by rewriting server paths.
Usage: tfpt unshelve [shelvesetname[;username]] [/nobackup]
[/migrate /source:serverpath /target:serverpath]
shelvesetname The name of the shelveset to unshelve
/nobackup Skip the creation of a backup shelveset
/migrate Rewrite the server paths of the shelved items
(for example to unshelve into another branch)
/source:serverpath Source location for path rewrite (supply with /migrate)
/target:serverpath Target location for path rewrite (supply with /migrate)
/nobackup Skip the creation of a backup shelveset
ตัวอย่างเช่นในการรวมชุดชั้นวางที่เรียกว่า "Shelve Set Name" ที่สร้างบน Branch1 ถึง Branch2 ให้ใช้สิ่งนี้:
>tfpt unshelve "Shelve Set Name";domain\userName /migrate /source:"$/Project/Branch1/" /target:"$/Project/Branch2/"
ทางเลือกอื่นสำหรับ tfpt ที่หลีกเลี่ยงการรวมไฟล์แต่ละไฟล์ด้วยตนเอง
ปัญหาเกี่ยวกับเครื่องมือ TFS อำนาจคือการที่คุณกำลังทำ 'ผสานไม่มีมูลความจริง' จึงต้องยืนยันทุกไฟล์ ฉันมีชุดชั้นวางของไฟล์มากกว่า 800 ไฟล์และฉันไม่เคยไว้ใจปุ่ม 'ผสานอัตโนมัติ' และไม่ต้องการเปิดไฟล์แต่ละไฟล์ - ดังนั้นฉันจึงต้องหาวิธีอื่น!
C:\temp\shelveset-name
(หมายเหตุ: ไม่มีแถบความคืบหน้าเมื่อส่งออก - ดังนั้นหากคุณมีชุดชั้นวางขนาดใหญ่ที่ใช้เวลานานในการส่งออกคุณจะต้องตรวจสอบใน Windows Explorer (ไฟล์> คุณสมบัติ> ขนาด) ว่าไฟล์ยังคงลงมาหากคุณ คิดว่ามันแข็ง)
ตอนนี้คุณต้องคัดลอกไปยังสาขาใหม่ด้วย Windows Explorer
สิ่งนี้ใช้ได้ผลสำหรับฉัน:
c:\temp\shelveset-name
จะต้องถูกเปลี่ยนชื่อเพื่อให้สอดคล้องกับสาขาใหม่ เคล็ดลับ: อย่าลืมคัดลอกไปถูกที่ !!!สำคัญ: ฉันพบว่าหากคุณไม่ใช้ TFS ออฟไลน์ก่อนคุณจะพบไฟล์ใหม่ ๆ (จากชุดการเปลี่ยนแปลงที่ไม่มีชั้นวางของคุณ) ที่แสดงโดยไม่มีเครื่องหมายถูกสีแดงเล็กน้อยและคุณจะต้องยกเว้นและรวมไว้อีกครั้ง เพื่อให้พวกเขาเพิ่ม หากใครมีทางเลือกอื่นในการแก้ปัญหานี้ฉันอยากรู้ - การรีเฟรชดูเหมือนจะไม่ได้ผล
ข้อมูลชั้นวางรวมถึงเส้นทางเฉพาะที่จะไป น่าเสียดายที่ฉันไม่รู้วิธีอัตโนมัติใด ๆ ในการปลดชั้นวางไปยังสถานที่อื่นนอกเหนือจากที่อยู่ในชั้นวาง ครั้งที่ฉันต้องการทำเช่นนี้ฉันต้องตรวจสอบไฟล์ที่เทียบเท่าในสาขาใหม่โดยไม่ได้รับการจัดวางจากสาขาเก่าจากนั้นคัดลอกไฟล์ด้วยตนเอง
แก้ไข: ฉันเดาว่าฉันทำมันยาก ฉันจะต้องลองใช้วิธีแก้ปัญหาของ Curt :)
ฉันใช้เวลาพอสมควรในการทำสิ่งนี้ให้สำเร็จและมีปัญหาเล็กน้อยที่ต้องเอาชนะ เป็นไปได้ แต่ที่นี่มีปัญหาเล็กน้อยและกฎบางประการที่ต้องปฏิบัติตามเพื่อหลีกเลี่ยงปัญหาเหล่านี้
ข้อผิดพลาด:
ไม่สามารถระบุพื้นที่ทำงานได้
โดยเฉพาะอย่างยิ่งปัญหานี้ถูกแก้ไขโดยใช้คำสั่งจากแหล่งโฟลเดอร์รากสาขา สิ่งนี้ตรงกันข้ามกับคำตอบบางคำใน SO ที่พวกเขาบอกว่าให้ใช้ "target" branch - ไม่ใช้ "source":
cd [your !!source!! branch root]
tfpt unshelve /migrate /source:"$/MyCollection/Development/Maint1.1" /target:"$/MyCollection/Development/Maint1.2" "myShelveset;UserName"
ปัญหาที่สองปรากฏหลังจากนี้ ดูเหมือนว่ามันไม่สามารถเชื่อมต่อกับเซิร์ฟเวอร์ TFS สิ่งที่ฉันรู้ฉันติดตั้ง VS หลายตัวและเชื่อมต่อกับเซิร์ฟเวอร์ TFS ที่แตกต่างกัน ฉันใช้ VS12 และฉันมีพื้นที่ทำงานและการเชื่อมต่อเซิร์ฟเวอร์ แต่ฉันไม่ทราบว่าต้องจำลองการเชื่อมต่อเดียวกันใน VS13 เพื่อให้ TFPT2013 ทำงานได้ เชื่อมต่อกับเซิร์ฟเวอร์และพื้นที่ทำงานเดียวกัน
ฉันยังลองทำโดยใช้ TFPT2015 แต่ฉันติดตั้งแล้วและไม่ได้ติดตั้ง TFPT.exe จึงไร้ประโยชน์ ดังนั้นฉันจึงลองจาก TFPT2013 เป็น TFS2015 และมันใช้ได้กับคำสั่งนี้โดยเฉพาะ ฉันสงสัยว่าทำไมไม่ถ้า VS12 / 13 ทำงานได้ดีกับ TFS2015?
เพื่อสรุป
สามารถใช้ขั้นตอนต่อไปนี้สำหรับชั้นวางขนาดเล็ก (~ 20 ไฟล์หรือน้อยกว่า)