Git ละเว้นและเป้าหมาย Maven


117

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

ฉันต้องการยกเว้นโฟลเดอร์ 'เป้าหมาย' ทั้งหมดในโครงการ maven ที่มีโมดูลย่อยจำนวนหนึ่ง ฉันรู้ว่าฉันสามารถแยกแต่ละรายการในระดับบนสุด. gitignore ได้อย่างชัดเจน แต่ฉันอยากจะระบุรูปแบบเช่น ** / target / * ที่นั่นเพื่อให้มันละเว้นอินสแตนซ์ในไดเรกทอรีย่อยโดยอัตโนมัติหรือไม่

เป็นไปได้หรือไม่


คุณใช้การกำหนดค่าใดที่ใช้งานได้ /.settings/จะละเว้น 'xxx / .settings / *' เท่านั้นไม่ใช่ '.settings / *' หรือ 'xxx / yyy / .settings / *': ดูเหมือนว่ารูปแบบการละเว้นจะไม่ถูกนำมาใช้ซ้ำ ดูstackoverflow.com/questions/971465/…ด้วย
VonC

คำตอบ:


98

เป็นไปได้ที่จะใช้รูปแบบใน.gitignoreไฟล์ ดูหน้าคน gitignore รูปแบบ*/target/*ควรละเว้นไดเร็กทอรีที่ชื่อเป้าหมายและสิ่งใดก็ตามที่อยู่ภายใต้นั้น หรือคุณอาจพยายาม*/target/**เพิกเฉยต่อทุกสิ่งที่อยู่ภายใต้เป้าหมาย


4
ขอบคุณ! สำหรับใครก็ตามที่นี่เป็นเนื้อหาสำหรับ. gitignore เพื่อข้าม maven และคราสที่ใช้ประโยชน์ได้ target / * / target / .metadata tar.gz
sgargan

3
คุณใช้การกำหนดค่าใดที่ใช้งานได้ /.settings/จะละเว้น 'xxx / .settings / *' เท่านั้นไม่ใช่ '.settings / *' หรือ 'xxx / yyy / .settings / *': ดูเหมือนว่ารูปแบบการละเว้นจะไม่ถูกนำมาใช้ซ้ำ ดูstackoverflow.com/questions/971465/…ด้วย
VonC

6
สำหรับโครงการหลายโมดูลคุณอาจต้องการใช้** / target /แต่ระวังอย่ายกเว้นไดเรกทอรี "เป้าหมาย" ที่ถูกต้องในแหล่งที่มา
Bogdan

1
/target/**ทำงานใน\.git\info\excludeไฟล์ได้ดี
Abhijeet

เพิ่งพยายามผูกมัดโปรเจ็กต์ java ด้วยแพ็กเกจย่อย "เป้าหมาย" ในโมดูลใดโมดูลหนึ่ง :(
okutane

222

.gitignoreไฟล์ในไดเรกทอรีรากไม่นำไปใช้กับไดเรกทอรีย่อยทั้งหมด ของฉันมีลักษณะดังนี้:

.classpath
.project
.settings/
target/

สิ่งนี้อยู่ในโครงการ maven แบบหลายโมดูล โมดูลย่อยทั้งหมดถูกอิมพอร์ตเป็นโปรเจ็กต์ eclipse แต่ละโปรเจ็กต์โดยใช้ m2eclipse ฉันไม่มี.gitignoreไฟล์เพิ่มเติม อันที่จริงถ้าคุณดูในหน้าgitignore man :

รูปแบบที่อ่านจาก.gitignoreไฟล์ในไดเร็กทอรีเดียวกันกับพา ธหรือในไดเร็กทอรีหลัก ...

ดังนั้นสิ่งนี้น่าจะเหมาะกับคุณ


5
นั่นคือคำตอบที่ดีกว่า " / target / " ไม่รวมไดเร็กทอรีที่ใดก็ตามที่อยู่ในโครงสร้างของไดเร็กทอรี แต่จะใช้ไม่ได้กับไฟล์ (ดูstackoverflow.com/questions/971465/… )
VonC

3
หากคุณอ่านต่อจะมีข้อความว่า "รูปแบบเหล่านี้ตรงกันโดยสัมพันธ์กับตำแหน่งของไฟล์. gitignore" answear ของคุณผิด ...
user1387219

ฉันใช้แนวทางนี้และใช้ "target /" เพื่อละเว้นโฟลเดอร์สร้าง maven ทั้งหมดอย่างไรก็ตามโปรดระวังว่าคุณเสี่ยงที่จะละเว้นโค้ดที่อยู่ในแพ็คเกจที่มีโฟลเดอร์ "เป้าหมาย" ในเส้นทางของพวกเขา (ในโปรเจ็กต์ที่มีคลาสต่อไปนี้: src/main/java/org/example/game/archery/bow/LongBow.java และsrc/main/java/org/example/game/archery/target/Target.javaคุณจะไม่พบสิ่งใดที่จะตี LongBow ของคุณด้วยการกำหนดค่า. gitignore :-))
Cristiano Costantini

4

ตามที่ระบุไว้ในความคิดเห็นของ Abhijeet คุณสามารถเพิ่มบรรทัดเช่น:

/target/**

เพื่อไม่รวมไฟล์ใน\.git\info\โฟลเดอร์

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


2

ฉันไม่สนใจคลาสทั้งหมดที่อยู่ในโฟลเดอร์เป้าหมายจาก git เพิ่มบรรทัดต่อไปนี้ในไฟล์. gitignore ที่เปิด:

/ .class

หรือ

* / เป้าหมาย / **

มันทำงานได้อย่างสมบูรณ์แบบสำหรับฉัน ลองมัน.


0

เพิ่มบรรทัดต่อไปนี้ใน gitignore จากไฟล์ที่ไม่ต้องการทั้งหมด

/target/
*/target/**
**/META-INF/
!.mvn/wrapper/maven-wrapper.jar

### STS ###
.apt_generated
.classpath
.factorypath
.project
.settings
.springBeans
.sts4-cache

### IntelliJ IDEA ###
.idea
*.iws
*.iml
*.ipr

### NetBeans ###
/nbproject/private/
/build/
/nbbuild/
/dist/
/nbdist/
/.nb-gradle/
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.