SVN: มีวิธีการทำเครื่องหมายไฟล์ว่า "ไม่ยอมรับ" หรือไม่?


153

ด้วย TortoiseSVN ฉันสามารถย้ายไฟล์ไปยังรายการการเพิกเฉยต่อการกระทำดังนั้นเมื่อฉันส่งทรีทั้งต้นการเปลี่ยนแปลงกับไฟล์นั้นจะไม่ได้รับการยืนยัน

มีวิธีทำสิ่งเช่นนั้นโดยใช้เครื่องมือบรรทัดคำสั่ง svn หรือไม่

แก้ไข: ขอบคุณสำหรับคำแนะนำในการใช้svn:ignoreแต่นั่นไม่ได้ทำสิ่งที่ฉันกำลังมองหา

svn:ignoreส่งผลกระทบต่อสิ่งต่างๆเช่นsvn add& svn import. มันให้รายการรูปแบบชื่อไฟล์ที่จะไม่สนใจ

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


1
มีวิธีใช้สาขาส่วนบุคคลและเปลี่ยนสถานะ [ดูโพสต์อื่น ๆ ของฉันในหัวข้อนี้] [1] [1]: stackoverflow.com/questions/862950/…
ptitpion

คำตอบ:


120

การโค่นล้มไม่มีคุณสมบัติ "ไม่ยอมรับ" / "ไม่ยอมรับการกระทำ" ในตัวตั้งแต่เดือนกุมภาพันธ์ 2559 / เวอร์ชั่น 1.9 คำตอบนี้เป็นวิธีแก้ปัญหาบรรทัดคำสั่งที่ไม่เหมาะ

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

  • หนึ่งสำหรับงานที่คุณต้องการมอบหมาย [งาน]
  • หนึ่งสิ่งที่คุณต้องการเพิกเฉย [ไม่สนใจ]

เนื่องจากมีแบบอย่างของ TortoiseSVN ฉันจึงใช้ "ign-on-commit" ในตัวอย่างของฉันสำหรับไฟล์ที่ฉันไม่ต้องการคอมมิท ฉันจะใช้ "งาน" สำหรับไฟล์ที่ฉันทำ แต่คุณสามารถเลือกชื่อที่คุณต้องการ

ก่อนอื่นให้เพิ่มไฟล์ทั้งหมดลงในรายการเปลี่ยนชื่อ "งาน" สิ่งนี้จะต้องถูกเรียกใช้จากรูทของสำเนาการทำงานของคุณ:

svn cl work . -R

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

จากนั้นสำหรับไฟล์ที่คุณต้องการยกเว้น:

svn cl ignore-on-commit path\to\file-to-ignore

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

เมื่อคุณพร้อมที่จะส่งมอบไฟล์ที่ถูกดัดแปลงที่คุณต้องการจะคอมมิทคุณก็แค่เพิ่ม "--cl work" ในการคอมมิท:

svn commit --cl work -m "message"

นี่คือตัวอย่างง่ายๆที่ดูเหมือนกับเครื่องของฉัน:

D:\workspace\trunk>svn cl work . -R
Skipped '.'
Skipped 'src'
Skipped 'src\conf'
A [work] src\conf\db.properties
Skipped 'src\java'
Skipped 'src\java\com'
Skipped 'src\java\com\corp'
Skipped 'src\java\com\corp\sample'
A [work] src\java\com\corp\sample\Main.java
Skipped 'src\java\com\corp\sample\controller'
A [work] src\java\com\corp\sample\controller\Controller.java
Skipped 'src\java\com\corp\sample\model'
A [work] src\java\com\corp\sample\model\Model.java
Skipped 'src\java\com\corp\sample\view'
A [work] src\java\com\corp\sample\view\View.java
Skipped 'src\resource'
A [work] src\resource\icon.ico
Skipped 'src\test'

D:\workspace\trunk>svn cl ignore-on-commit src\conf\db.properties
D [work] src\conf\db.properties
A [ignore-on-commit] src\conf\db.properties

D:\workspace\trunk>svn status

--- Changelist 'work':
        src\java\com\corp\sample\Main.java
        src\java\com\corp\sample\controller\Controller.java
        src\java\com\corp\sample\model\Model.java
M       src\java\com\corp\sample\view\View.java
        src\resource\icon.ico

--- Changelist 'ignore-on-commit':
M       src\conf\db.properties

D:\workspace\trunk>svn commit --cl work -m "fixed refresh issue"
Sending        src\java\com\corp\sample\view\View.java
Transmitting file data .done
Committing transaction...
Committed revision 9.

อีกทางเลือกหนึ่งคือเพิ่มไฟล์ทุกไฟล์ที่คุณต้องการคอมมิชชันลงในรายการ 'งาน' และไม่แม้แต่จะรักษารายการเพิกเฉย แต่ก็เป็นงานจำนวนมากเช่นกัน จริงๆทางออกเดียวที่เหมาะสมที่สุดคือถ้า / เมื่อสิ่งนี้ถูกนำไปใช้ใน SVN เอง มีปัญหาที่ยาวนานเกี่ยวกับเรื่องนี้ในตัวติดตามปัญหาการโค่นล้มSVN-2858ในกรณีที่การเปลี่ยนแปลงนี้เกิดขึ้นในอนาคต


1
ฉันได้เพิ่มสองไฟล์ด้วยคำสั่งที่คุณพูดถึง: $svn st --- Changelist 'ignore-on-commit': M database.php M config.php และยังมีการส่งไปที่ repo ความคิดใดที่ฉันทำผิด
Attila Fulop

7
การเพิ่มไฟล์ไปยังรายการ 'การเพิกเฉยต่อการกระทำ' ไม่ได้อยู่ในตัวเองเพื่อป้องกันไม่ให้ไฟล์ถูกคอมมิท TortoiseSVN (ไคลเอนต์ Windows GUI) ได้สร้างในส่วนที่เกี่ยวกับ "การละเว้นการกระทำ" แต่ svn บรรทัดคำสั่งไม่ได้ ข้อเสนอแนะเดียวที่ฉันมีในคำตอบเดิมของฉันคือการเพิ่มไฟล์ที่คุณต้องการส่งไปยังผู้เปลี่ยนแปลงและบอกให้ทำเช่นนั้น
Joshua McKinnon

7
การเพิกเฉยต่อการกระทำเป็นรายการสงวนลิขสิทธิ์ของเต่า สิ่งที่มันทำคือป้องกันไม่ให้มีการตรวจสอบรายการใน GUI ตามค่าเริ่มต้นดังนั้นจึงเป็นคุณลักษณะเฉพาะของ Tortoise GUI คุณไม่จำเป็นต้องใช้บรรทัดคำสั่งเพื่อเพิ่มลงในรายการเช่นกันหากคุณใช้ GUI เพียงแค่เมนูบริบทในการยอมรับรายการและที่ด้านล่างคุณสามารถย้ายไปยังรายการการเปลี่ยนแปลงและการเพิกเฉยต่อการกระทำได้ถูกกำหนดไว้แล้ว tortoisesvn.net/docs/release/TortoiseSVN_en/…
tjmoore

นี่ไม่ได้ทำแจ็ค มันมุ่งมั่นทุกอย่าง
ahnbizcad

ไม่ทำงานคำถามที่ถามโดยเฉพาะเกี่ยวกับโซลูชันบรรทัดคำสั่งไม่ใช่ GUI
riv

26

ฉันได้อย่างต่อเนื่องพบว่าตัวเองอยู่ในสถานการณ์นี้มากเกินไปและการเปลี่ยนแปลงแบบไม่ทำงานสำหรับฉัน - ฉันต้องการที่จะทำให้รายชื่อของไฟล์ที่ผมไม่ต้องการที่จะกระทำมากกว่าการรักษารายการใหญ่ของไฟล์ที่ผมทำลง เพื่อกระทำ!

ฉันทำงานบนบรรทัดคำสั่ง linux: ดังนั้นโซลูชันของฉันคือการสร้างสคริปต์ / usr / bin / svnn (ใช่ด้วยสอง 'n!) ดังนี้:

#! /bin/bash
DIR=/home/mike/dev/trunk

IGNORE_FILES="\
        foo/pom.xml \
        foo/src/gwt/App.gwt.xml \
        foo/src/main/java/gwt/Common.gwt.xml \
        foo/src/main/resources/context/datasource/local.xml \
        foo/src/main/resources/context/environment/local.xml"

for i in $IGNORE_FILES; do mv $DIR/$i $DIR/"$i"_; done;

svn "$@"

for i in $IGNORE_FILES; do mv $DIR/"$i"_ $DIR/$i; done;

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

sudo chmod +x /usr/bin/svnn

.. จากนั้นคุณเพียงแค่ใช้ "svnn" แทน "svn" เพื่อเรียกใช้การโค่นล้มโดยไม่ต้องกลัวว่าจะทำการตรวจสอบการเปลี่ยนแปลงไฟล์ในเครื่องในรายการ IGNORE_FILES ฉันหวังว่านี่จะช่วยได้!


ในที่สุดคำตอบนี้ถูกต้องจริง คุณต้องเขียนเครื่องมือ นี่ไม่สมบูรณ์จริง ๆ เพราะฉันต้องการมีตัวเลือกแบบไดนามิกเช่นsvnn ignore configs/*- กับ wildcard และ bells and whistles ฉันคิดว่าฉันเขียนอะไรแบบนั้นแล้วกลับมาที่นี่!
Tomasz Gandor

นี่มันเยี่ยมมาก! ยิ่งกว่านั้นให้สร้างนามแฝงเป็น. bashrc สำหรับ svn -> svnn ยิ่งไปกว่านั้นแทนที่จะระบุไฟล์ที่จะเพิกเฉยภายในคำสั่งมันอาจทำงานเหมือนคอมไพล์มันจะตรวจสอบไฟล์. signore ภายในโฟลเดอร์และละเว้นไฟล์ทุกไฟล์ที่ตรงกับรูปแบบ
Tarek

แทนที่จะต้องเรียนรู้อีกครั้งพิมพ์svnnพิจารณาเรียกมันและวางสคริปต์นี้ในบางสิ่งบางอย่างที่สามารถเป็นจุดเริ่มต้นของเส้นทางของคุณเช่นsvn จากสคริปต์ของตัวเองแล้วคุณจะเรียก${HOME}/bin /usr/bin/svn
Joost

17

ฉันไม่เชื่อว่ามีวิธีเพิกเฉยไฟล์ในที่เก็บ เรามักจะพบกับสิ่งนี้ด้วย web.config และไฟล์การกำหนดค่าอื่น ๆ

แม้ว่าจะไม่สมบูรณ์แบบโซลูชันที่ฉันเห็นและใช้บ่อยที่สุดคือการมีไฟล์. default และงาน nant เพื่อสร้างสำเนาโลคัล

ตัวอย่างเช่นใน repo เป็นไฟล์ที่เรียกweb.config.defaultว่ามีค่าเริ่มต้น จากนั้นสร้างภารกิจ nant ที่จะเปลี่ยนชื่อweb.config.defaultไฟล์ทั้งหมดเป็นweb.configที่สามารถกำหนดค่าท้องถิ่น งานนี้ควรถูกเรียกเมื่อมีการดึงสำเนาทำงานใหม่หรือเรียกใช้บิลด์

คุณจะต้องเพิกเฉยต่อweb.configไฟล์ที่สร้างขึ้นเพื่อไม่ให้มีความมุ่งมั่นกับที่เก็บ


8

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

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


1
แต่นั่นคือสิ่งที่เราต้องการ ตัวอย่างเช่นไฟล์ต้นฉบับที่คุณต้องตั้งค่า defaultUserId = yourId แทนที่จะเป็นค่าเริ่มต้นของระบบ
orbfish

4

ฉันมาที่เธรดนี้เพื่อหาวิธีสร้างการ "ปรมาณู" ของไฟล์บางไฟล์และแทนที่จะเพิกเฉยบางไฟล์ที่คอมมิชชันฉันไปทางอื่นและยอมรับเฉพาะไฟล์ที่ฉันต้องการ:

svn ci filename1 filename2

อาจจะช่วยใครซักคน


คำตอบของคุณคือคำแนะนำที่เพียงพอเพียงข้อเดียวในชุดข้อความนี้ เป็นเพียงนามแฝงที่จะsvn ci svn commitคำสั่ง Commit ช่วยให้การกระทำที่เฉพาะเจาะจงของไฟล์ที่ระบุ
oxfn

3

พวกฉันเพิ่งพบทางออก เนื่องจาก TortoiseSVN ทำงานได้ตามที่เราต้องการฉันพยายามติดตั้งภายใต้ Linux ซึ่งหมายถึงทำงานบน Wine น่าแปลกที่มันใช้งานได้! สิ่งที่คุณต้องทำคือ:

  1. เพิ่มไฟล์ที่คุณต้องการข้ามการคอมมิทด้วยการเรียกใช้: "svn changelist 'ไม่สนใจการกระทำ'"
  2. ใช้ TortoiseSVN เพื่อคอมมิต: "~ / .wine / drive_c / Program \ Files / TortoiseSVN / bin / TortoiseProc.exe / คำสั่ง: commit / path: '
  3. ไฟล์ที่ถูกแยกจะไม่ถูกตรวจสอบสำหรับการคอมมิชชันตามค่าเริ่มต้นในขณะที่ไฟล์ที่ถูกแก้ไขอื่น ๆ จะถูกตรวจสอบ นี่เป็นสิ่งที่เหมือนกับใน Windows สนุก!

(เหตุผลที่ต้องแยกไฟล์โดย CLI นั้นเป็นเพราะไม่พบรายการเมนูสำหรับการทำที่ไม่แน่ใจว่าทำไมทุกวิธีนี้ใช้งานได้ดี!)


2

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

ในการรับข้อขัดแย้งa-fileสำเนาทำงาน (WC) ของคุณไม่มีข้อมูลล่าสุดa-fileจากที่เก็บและa-fileใน WC ของคุณมีการเปลี่ยนแปลงที่อยู่ในตำแหน่งเดียวกันกับการเปลี่ยนแปลงในที่เก็บ (การเปลี่ยนแปลงที่คุณไม่ได้อัปเดต ถึง) หากคุณไม่ต้องการที่จะรอสำหรับเงื่อนไขดังกล่าวข้างต้นคุณสามารถสร้างความขัดแย้งสำหรับa-fileเช่นนี้
ในการทำงานสำเนา 1 (WC1), เพิ่มบรรทัดของข้อความไปด้านบนของa-fileเช่น"ทำให้ความขัดแย้งที่นี่" ใช้ไวยากรณ์ที่จำเป็นเพื่อให้คุณไม่ทำลายที่เก็บ กระทำa-fileจาก WC1 ใน WC2 เพิ่มสายที่แตกต่างกันของข้อความไปด้านบนของa-fileเช่น"ฉันต้องการความขัดแย้ง" อัปเดตจาก WC2 และตอนนี้ไฟล์ควรขัดแย้งกัน


1

ฉันจะเขียนสคริปต์ทุบตีผู้ช่วยที่ทำงานsvn commitบนไฟล์ทั้งหมดที่คุณต้องการและไม่มีไฟล์ที่คุณไม่ต้องการ วิธีนี้คุณสามารถควบคุมได้มากขึ้น

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

svn commit -m "" `svn status | grep "^M.*[h|cpp]$" | awk '{print $2}' | tr "\\n" " "`

เปลี่ยน / เพิ่มส่วนขยายไปยัง[h|cpp]ส่วน เพิ่มข้อความบันทึกระหว่างราคาของ-m ""ถ้าจำเป็น


1

แนวคิดที่เสนอบางอย่างสามารถนำไปใช้ได้ดังนี้:

บน Windows ใน PowerShell

เพิ่มทั้งหมดลงในรายการเริ่มต้น ps1

dir -Recurse | ? { -not $_.PSIsContainer } | % { svn cl default $_.FullName }

เพิ่มเพื่อละเว้น list.ps1

 dir file1 ... filN  % { $_.FullName } > ignore-on-commit
 cat .\ignore-on-commit | % { svn cl ignore-on-commit $_ }
 svn add ignore-on-commit

ตอนนี้คุณสามารถใช้นามแฝงsvn ci --changelist defaultเพื่อที่คุณจะได้ไม่ต้องระบุในแต่ละครั้ง สิทธิประโยชน์เพิ่มเติมคือคุณสามารถเก็บรายการที่ไม่ใช้งาน (ถ้าคุณต้องการ) ในที่เก็บ

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


1

ฉันเบื่อที่จะรอเรื่องนี้เพื่อสร้าง SVN ฉันใช้ tortoiseSVN โดยไม่ใช้คำสั่ง แต่สิ่งนั้นปรากฏขึ้นในกล่องโต้ตอบผู้ใช้ที่คุณไม่สามารถระงับจากบรรทัดคำสั่งและเมื่อฉันรันสคริปต์สร้างของฉันและไปทำชาสักถ้วยฉันเกลียดเมื่อ ฉันกลับมาค้นพบว่ามันกำลังรอการป้อนข้อมูลของผู้ใช้ 10% ของทางผ่าน

ดังนั้นนี่คือสคริปต์ windows powershell ที่ยอมรับเฉพาะไฟล์ที่ไม่ได้อยู่ในรายการการเปลี่ยนแปลง:

# get list of changed files into targets
[XML]$svnStatus = svn st -q --xml C:\SourceCode\Monad
# select the nodes that aren't in a changelist
$fileList = $svnStatus.SelectNodes('/status/target/entry[wc-status/@item != "unversioned"]') | Foreach-Object {$_.path};
# create a temp file of targets
$fileListPath =  [IO.Path]::GetTempFileName();
$fileList | out-file $fileListPath -Encoding ASCII
# do the commit
svn commit --targets $fileListPath -m "Publish $version" --keep-changelists 
# remove the temp file
Remove-Item $filelistPath

1

อัปเดตสคริปต์ของ user88044

ความคิดคือการผลักดันไฟล์ในรายการที่ต้องห้ามและเรียกใช้สคริปต์ที่ชั่วร้าย

สคริปต์จะแยกไฟล์ที่ห้ามกระทำจากคำสั่ง: สถานะ svn --changelist 'do-not-commit'

#! / bin / bash DIR = "$ (pwd)"

IGNORE_FILES = "$ (svn status --changelist 'do-not-commit' | tail -n +3 | grep -oE '[^] + $')"

สำหรับฉันใน $ IGNORE_FILES; ทำ mv $ DIR / $ i $ DIR / "$ i" _; ทำ;

svn "$ @";

สำหรับฉันใน $ IGNORE_FILES; ทำ mv $ DIR / "$ i" _ $ DIR / $ i; ทำ;

สคริปต์ถูกวางใน / usr / bin / svnn (sudo chmod + x / usr / bin / svnn)

สถานะ svnn, svnn กระทำ, ฯลฯ ...


1

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

1) คลิก "กระทำ SVN ... " (เราจะไม่กระทำเพียงวิธีหาเมนูแบบกราฟิกสำหรับรายการการเปลี่ยนแปลง) 2) ในรายการคลิกขวาที่ไฟล์ที่คุณต้องการยกเว้น 3) เมนู: ย้ายไปที่รายการเปลี่ยนแปลง> ละเว้นการกระทำ

ครั้งต่อไปที่คุณทำสัญญา SVN ... ไฟล์จะปรากฏขึ้นโดยไม่ถูกตรวจสอบที่ท้ายรายการภายใต้หมวดหมู่การเพิกเฉยต่อการกระทำ

ทดสอบกับ: TortoiseSVN 1.8.7, สร้าง 25475 - 64 บิต, 2014/05/05 20:52:12, การโค่นล้ม 1.8.9, - ปล่อย


1
youps ฉันเพิ่งเห็นความคิดเห็นของ tjmoore แล้วให้ข้อมูลที่ดีสำหรับผู้ใช้ tortoiseSVN ... ไม่มีบรรทัดคำสั่ง tortoisesvn.net/docs/release/TortoiseSVN_en/ …
luney

สิ่งนี้หักใน 1.9 หรือไม่
Jake Hm

1

นี่มันสายไปแล้วสำหรับเกมนี้ แต่ฉันพบว่าบรรทัดคำสั่งที่ยอดเยี่ยมที่สุดสำหรับปัญหานี้ เสร็จสิ้นการใช้ทุบตี สนุก.

svn status | grep -v excluding | sed 's/^A */"/g; s/$/"/g' | tr '\n' ' ' | xargs svn commit -m "My Message"

ตกลงดังนั้นนี่คือคำอธิบายของคำสั่ง บางสิ่งจะต้องมีการเปลี่ยนแปลงตามกรณีการใช้งานของคุณ

svn status

ฉันได้รับรายชื่อไฟล์ทั้งหมด พวกเขาทั้งหมดจะเริ่มต้นด้วยตัวอักษรสถานะเหล่านั้น (?,!, A, ฯลฯ ) แต่ละคนอยู่ในสายของตัวเอง

grep -v excluding

ฉันใช้ grep เพื่อกรองรายการ สามารถใช้ตามปกติ (เพื่อรวม) หรือพร้อมกับแฟล็ก -v (เพื่อแยกออก) ในกรณีนี้มันถูกใช้เพื่อยกเว้นโดยมีวลี "ยกเว้น" เป็นสิ่งที่จะถูกยกเว้น

sed 's/^. */"/g; s/$/"/g'

ตอนนี้ฉันลบตัวอักษรสถานะและช่องว่างที่จุดเริ่มต้นของแต่ละบรรทัดแล้วอ้างอิงแต่ละบรรทัดโดยใช้ sed ชื่อไฟล์บางส่วนของฉันมีช่องว่างในนั้นดังนั้นข้อความ

tr '\n' ' '

เมื่อใช้ tr ฉันจะขึ้นบรรทัดใหม่ทั้งหมดด้วยช่องว่าง ตอนนี้รายการไฟล์ทั้งหมดของฉันที่จะส่งมอบอยู่ในบรรทัดเดียว

xargs svn commit -m "My Message"

สุดท้ายฉันใช้ xargs เพื่อดำเนินการคำสั่งกระทำของฉันด้วยข้อความ มันทำคอมมิชชันและดร็อปลิสต์ไฟล์ของฉันเป็นอาร์กิวเมนต์สุดท้าย

ผลที่ได้คือทุกอย่างทำงานได้ตามที่ฉันต้องการ ฉันยังคงเกลียดชัง svn ที่บังคับให้ฉันต้องกระโดดผ่านห่วง goddamn เหล่านี้ แต่ฉันสามารถอยู่กับสิ่งนี้ได้ ฉันคิดว่า.


0

ขณะที่ฉันกำลังเผชิญกับปัญหาเดียวกันที่แน่นอนและ googling ของฉันไม่ให้อะไรฉันเลยฉันคิดว่าฉันพบวิธีแก้ปัญหา นี่คือสิ่งที่ฉันทำดูเหมือนว่าจะทำงานให้ฉัน แต่เมื่อฉันติดอยู่กับ SVN เวอร์ชันเก่า (<1.5 เนื่องจากไม่มีตัวเลือก --keep-local) และฉันก็ไม่มีผู้เชี่ยวชาญ ฉันไม่สามารถแน่ใจได้ว่ามันเป็นทางออกที่สากล หากมันเหมาะกับคุณเช่นกันโปรดแจ้งให้เราทราบ!

ฉันกำลังจัดการกับการติดตั้ง Prestashop ที่ฉันได้รับจาก SVN เนื่องจากมีคนอื่นเริ่มทำงานแล้ว เนื่องจากการตั้งค่าฐานข้อมูลเสร็จแล้วสำหรับเซิร์ฟเวอร์อื่นฉันจึงเปลี่ยนค่าในบางไฟล์ในโฟลเดอร์ / config เนื่องจากโฟลเดอร์นี้ได้รับการกำหนดเวอร์ชันไว้แล้วการตั้งค่าเป็น svn: การละเว้นจะไม่ป้องกันการแก้ไขในเครื่องของฉัน นี่คือสิ่งที่ฉันทำ:

cp config ../cfg_bkp              # copy the files out of the repo
svn rm config                     # delete files both from svn and "physically"
svn propset svn:ignore "config" . # as the files no longer exists, I can add my ignore rule and then...
mv ../cfg_bkp config              # ...bring'em back
svn revert --recursive config     # make svn forget any existing status for the files (they won't be up for deletion anymore)

ตอนนี้ฉันสามารถเรียกใช้ svn add --force ที่ repo โดยไม่เพิ่มการตั้งค่าของฉันแม้ว่าจะไม่ตรงกับเวอร์ชั่นของ repo (ฉันเดาว่าฉันจะต้องดำเนินการทั้งหมดนี้อีกครั้งหากฉันแก้ไขอีกครั้งไม่ได้ทดสอบ) ฉันสามารถอัปเดต svn ได้เช่นกันโดยไม่ต้องเขียนทับไฟล์หรือรับข้อผิดพลาด


0

โซลูชันที่ไม่เพิกเฉยต่อการเปลี่ยนแปลงในคุณสมบัติของไดเรกทอรี

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

svn ci --cl work -m "this commits files from the work changelist only"
svn up
svn ci --depth empty DIR . -m "record merge properties"

คุณอาจต้องทำเช่นนั้นสำหรับหลาย ๆ ไดเรกทอรี (ที่นี่ฉันบันทึกคุณสมบัติของDIRและของ dir ปัจจุบัน.) โดยทั่วไปผู้ที่มี a Mในคอลัมน์ที่สองเมื่อออกsvn statusคำสั่ง

สารละลาย

svn patchผมใช้แพทช์และ ในรหัสปลอม:

svn diff $IGNORE_FILES > MYPATCH   # get the mods to ignore
svn patch --reverse-diff MYPATCH   # remove the mods
svn ci -m "message"                # check-in files and directory properties
svn patch MYPATCH                  # re-apply the mods

เช่นเดียวกับโปสเตอร์อื่น ๆ ฉันใช้สคริปต์เพื่อรักษารายการไฟล์ที่จะไม่สนใจ:

#! /usr/bin/env bash

finish() {
    svn patch MYPATCH               # re-apply the mods
}
trap finish EXIT

IGNORE_FILES="\
sources/platform/ecmwf-cca-intel-mpi.xml \
runtime/classic/platform/ecmwf-cca.job.tmpl \
runtime/classic/platform/ecmwf-cca-intel.xml"

svn diff $IGNORE_FILES > MYPATCH # get the mods to ignore
svn patch --reverse-diff MYPATCH # remove the mods

svn "$@"

ฉันมักจะใช้มันด้วยและcirevert -R .


-1

svn:ignore คือคำตอบของคุณ

ตัวอย่าง:

$ svn propset svn:ignore -F .cvsignore .
property 'svn:ignore' set on '.'

1
หมายเหตุตัวอย่างข้างต้นแสดงวิธีใช้ไฟล์ cvsignore ที่กำหนดค่าไว้ก่อนหน้านี้เป็นอินพุตไปยังคุณสมบัติ svnignore ของคุณ
Ben Hoffstein

1
no svn: การละเว้นเป็นเพียงการยกเลิกการบีบอัดไฟล์ dos ไม่ทำงานกับไฟล์เวอร์ชัน
Sérgio

1
และมันก็ไม่ใช่ท้องถิ่น มันคือการเปลี่ยนแปลงคุณสมบัติที่จะกระทำด้วยตัวเอง
Adam Badura

-9
svn propset "svn:ignore" "*.xml" .

*.xmlเป็นรูปแบบของไฟล์ที่จะไม่สนใจ; คุณสามารถใช้ชื่อไดเรกทอรีได้ที่นี่เช่นกัน


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