การควบคุมเวอร์ชันบรรทัดคำสั่งด้วย Java จัดการกับ dirs ที่ซ้อนกันจำนวนมาก

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

การพิมพ์ไดเร็กทอรีเหล่านี้บนบรรทัดคำสั่งกำลังกลายเป็น PITA และดูเหมือนว่าจะหลีกเลี่ยงไม่ได้สำหรับการดำเนินการบางอย่างที่ไม่ใช่ประจำวัน เช่น "git rm" โดยเฉพาะอย่างยิ่งเมื่อฉันย้ายสิ่งต่าง ๆ ใน Eclipse จำเป็นต้องเล่น catch-up ที่บรรทัดคำสั่ง แต่ไม่มีไฟล์อีกต่อไป (ไม่สามารถใช้การขยายเชลล์หรือ *) นอกจากนี้ การขยายเชลล์ไม่ได้คำนึงถึงไฟล์ที่ถูกละเว้น และการส่งไฟล์ที่ถูกละเว้นไปยังคำสั่ง git จะทำให้คำสั่งถูกยกเลิก (อย่างถูกต้อง) ไม่สนใจการรวม IDE ด้วยเหตุผลที่ไม่อยู่ในขอบเขตของคำถามนี้

มีใครคิดบ้างไหมว่าจะทำให้สิ่งนี้ง่ายขึ้น?

ฉันใช้ win7/powershell แต่ก็เปิดรับข้อเสนอแนะโดยใช้ bash หรือแบตช์เช่นกัน


person Dustin Getz    schedule 26.01.2011    source แหล่งที่มา
comment
ไม่รู้จากในหัวเลย แต่จะสร้างตัวแปรสภาพแวดล้อมสำหรับสถานที่ที่ใช้บ่อยที่สุดได้อย่างไร   -  person ring bearer    schedule 26.01.2011
comment
โครงสร้าง dir ลึกเกินไป มีตำแหน่งมากเกินไป   -  person Dustin Getz    schedule 26.01.2011
comment
ฉันต้องยอมรับว่าฉันไม่เข้าใจปัญหาดีนัก - หากคุณลบไดเร็กทอรีและจำเป็นต้องซิงค์ไดเร็กทอรีนั้นกับ git คุณก็สามารถทำได้ git add -A topdir และมันจะลบซ้ำออกจากดัชนี ในความเป็นจริงคุณก็สามารถทำได้ git add -A และมันจะนำดัชนีไปซิงค์กับ workdir ของคุณ... นั่นไม่ใช่การคัดเลือกที่เพียงพอหรือ?   -  person araqnid    schedule 26.01.2011


คำตอบ (6)


ไม่คุ้นเคยกับ win7/powershell สมมติว่าชื่อคลาสของคุณไม่ซ้ำกัน ใน bash คุณสามารถค้นหาไฟล์ได้

find . -name SomeFile.java

จากนั้นคุณสามารถ "git rm" พวกมันด้วย

git rm $(find . -name SomeFile.java)

แน่นอน หากคุณไม่ต้องการพิมพ์ "find . -name" ในแต่ละครั้ง คุณสามารถสร้างฟังก์ชันใน .bashrc เพื่อทำให้ง่ายขึ้นได้ PowerShell รองรับสิ่งที่คล้ายกันหรือไม่ ถ้าไม่เช่นนั้นจะลองมองหา cygwin ซึ่งช่วยให้คุณสามารถรัน bash ได้อย่างไร?

แก้ไขแล้ว

หากชื่อชั้นเรียนของคุณไม่ซ้ำกัน วิธีการนี้ก็คงไม่ได้ผลนัก

person Clint Miller    schedule 26.01.2011
comment
นอกจากนี้คุณใช้ IDE อะไร? มันมีการบูรณาการกับคอมไพล์หรือไม่? - person Clint Miller; 26.01.2011

ฉันยังไม่เคยใช้ git มาก่อน แต่ฉันใช้ Perforce ฉันคิดว่าคุณต้องอ้างอิงไดเรกทอรีจำนวนหนึ่งและคุณไม่สามารถใช้ไวด์การ์ดได้ด้วยเหตุผลบางประการ จากนั้นใน PowerShell คุณสามารถใช้โครงสร้างดังนี้:

## Find all directories named "test*"
dir * -inc test* -r | ? {$_.PSIsContainer} | % {git <some command> $_.FullName}

## Find all files and directories named "test*.*"
dir * -inc test*.* -r | % {git <some command> $_.FullName}

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

Function git {
    param(
        [Parameter(Position = 0, Mandatory = $true)]
        [String]$Command
        ,
        [Alias("PSPath")]
        [Parameter(Position = 1, ValueFromPipelineByPropertyName = $true)]
        [String[]]$Path
    )

    process {
        if ($Path) {
            $Path | {git.exe $Command $_}
        } else {
            git.exe $Command
        }
    }
}
person JasonMArcher    schedule 26.01.2011

ฉันไม่รู้เกี่ยวกับ git add -A -- และหลังจากใช้สิ่งนี้มาสองสามวัน ฉันก็ไม่ค่อยรู้สึกหงุดหงิดใจเท่าไหร่ จะกลับมารายงานครับ.

person Dustin Getz    schedule 28.01.2011

หากคุณต้องการหลีกเลี่ยงการพิมพ์ทุกเส้นทาง คุณสามารถใช้ TortoiseGit และดำเนินการจัดการผ่าน GUI

ฉันชอบใช้บรรทัดคำสั่งเหมือนกัน แต่ในบางกรณี (เช่น การคืนค่าไฟล์ 20 ไฟล์ในคราวเดียว) ฉันพบว่าการตรวจสอบไฟล์ในกล่องโต้ตอบการย้อนกลับทำได้ง่ายกว่าและเพียงคลิกตกลง สำหรับฉัน TortoiseGit ไม่ใช่สิ่งทดแทนคอนโซล Git แต่เป็นส่วนขยายที่สะดวกมาก

ขออภัย กรณีการใช้งานที่คุณกล่าวถึง (การลบหลายไฟล์พร้อมกัน) ไม่สามารถทำได้ด้วย TortoiseGit หากฉันต้องลบไฟล์จำนวนมากในคราวเดียว ฉันจะขอให้ git บอกฉันว่าไฟล์ใดเป็นเวอร์ชันปัจจุบัน (git ls-files) ไปป์รายการนั้นลงในไฟล์ แก้ไขไฟล์ จากนั้นทำ git rm สำหรับทุกไฟล์ที่เหลืออยู่ในไฟล์ที่แก้ไข

person eckes    schedule 28.01.2011

คุณได้ลองใช้ EGit แล้วหรือยัง มันไม่ใช่ git UI ที่งดงามที่สุดเท่าที่คุณเคยเห็นมา แต่ถ้าคุณใช้ eclipse อยู่แล้ว มันจะทำให้บางสิ่งง่ายขึ้น นอกจากนี้ ยังเป็นเรื่องดีที่ได้เห็นไอคอนขนาดเล็กเล็กๆ ใน Eclipse แสดงว่าไฟล์ใดมีการเปลี่ยนแปลงและไฟล์ใดไม่มีการเปลี่ยนแปลง

person MatrixFrog    schedule 29.01.2011

คุณได้ลองใช้ git fronted git gui แล้วหรือยัง? โดยปกติแล้วจะมาพร้อมกับ git และช่วยได้มากในการจัดเตรียมไฟล์จำนวนมากอย่างรวดเร็ว

person ordnungswidrig    schedule 28.01.2011
comment
ฉันไม่คิดว่าเป็นไปได้ คุณหมายถึง git gui หรือไม่ - person MatrixFrog; 30.01.2011