ฉันคิดว่ามันควรจะทำงานเพื่อคัดลอกไดเรกทอรีที่จะถูกเปลี่ยนชื่อไปยังไดเรกทอรีใหม่ที่มีชื่อที่ต้องการและลบไดเรกทอรีเก่าและgit add
, git commit
และpush
ทุกอย่าง แต่นี่เป็นวิธีที่ดีที่สุด?
ฉันคิดว่ามันควรจะทำงานเพื่อคัดลอกไดเรกทอรีที่จะถูกเปลี่ยนชื่อไปยังไดเรกทอรีใหม่ที่มีชื่อที่ต้องการและลบไดเรกทอรีเก่าและgit add
, git commit
และpush
ทุกอย่าง แต่นี่เป็นวิธีที่ดีที่สุด?
คำตอบ:
เปลี่ยนชื่อพื้นฐาน (หรือย้าย):
git mv <old name> <new name>
การเปลี่ยนชื่อตัวพิมพ์เล็กและตัวพิมพ์ใหญ่ - เช่น จากcasesensitive
การCaseSensitive
ได้คุณต้องใช้ขั้นตอนที่สอง:
git mv casesensitive tmp
git mv tmp CaseSensitive
( เพิ่มเติมเกี่ยวกับความไวตัวพิมพ์เล็กและใหญ่ใน Git … )
…ตามด้วยการกระทำและผลักดันจะเป็นวิธีที่ง่ายที่สุดในการเปลี่ยนชื่อไดเรกทอรีใน repo คอมไพล์
casesensitive
เป็นCaseSensitive
คุณสามารถทำเช่นนี้ได้ git mv casesensitive Temp
แล้ว git mv Temp CaseSensitive
git rm -rf --cached path/to/your/directories
แล้วเพิ่มอีกครั้งและกระทำ
git config core.ignorecase false
แล้วจึงเรียกใช้คำสั่งอย่างต่อเนื่องหรืออย่างอื่นส่วนที่สองฉันจะได้รับsource is empty
ข้อผิดพลาด
หากคุณได้รับข้อผิดพลาดนี้: ร้ายแรง: การเปลี่ยนชื่อ 'foldername' ล้มเหลว: อาร์กิวเมนต์ไม่ถูกต้อง
ลองสิ่งนี้:
git mv foldername tempname && git mv tempname folderName
git mv foldername tempname
และgit mv tempname folderName
ซึ่งควรทำงานบน Windows
1. เปลี่ยนชื่อโฟลเดอร์จากโฟลเดอร์เก่าเป็นโฟลเดอร์ใหม่
git mv oldfolder newfolder
2. หากโฟลเดอร์ใหม่อยู่ในที่เก็บของคุณอยู่แล้ว & คุณต้องการแทนที่และใช้: - บังคับ
git mv -f oldfolder newfolder
อย่าลืมที่จะเพิ่มการเปลี่ยนแปลงในดัชนี & กระทำหลังจากเปลี่ยนชื่อด้วย git mv
3. การเปลี่ยนชื่อ foldername เป็น folderName บนระบบไฟล์ที่ไม่ต้องคำนึงถึงตัวพิมพ์ใหญ่ - เล็ก
การเปลี่ยนชื่ออย่างง่าย ๆ ด้วยคำสั่ง mv ปกติ (ไม่ใช่ git mv) จะไม่ถูกจดจำว่าเป็นการเปลี่ยนไฟล์จาก git หากคุณลองด้วยคำสั่ง 'git mv' เหมือนในบรรทัดต่อไปนี้
git mv foldername folderName
หากคุณใช้ระบบไฟล์แบบไม่คำนึงถึงขนาดตัวพิมพ์เช่นคุณใช้ Mac และคุณไม่ได้กำหนดให้เป็นแบบตัวพิมพ์เล็กและตัวพิมพ์ใหญ่คุณจะพบข้อความแสดงข้อผิดพลาดดังนี้
ร้ายแรง: การเปลี่ยนชื่อ 'foldername' ล้มเหลว: อาร์กิวเมนต์ไม่ถูกต้อง
และนี่คือสิ่งที่คุณสามารถทำได้เพื่อให้มันใช้ได้: -
git mv foldername tempname && git mv tempname folderName
สิ่งนี้จะแยกกระบวนการเปลี่ยนชื่อโดยเปลี่ยนชื่อโฟลเดอร์ในตอนแรกเป็นชื่อเล่นที่แตกต่างอย่างสิ้นเชิง หลังจากเปลี่ยนชื่อเป็นชื่ออื่นที่แตกต่างกันในที่สุดก็สามารถเปลี่ยนชื่อโฟลเดอร์เป็นชื่อโฟลเดอร์ใหม่ หลังจากนั้น 'git mv's อีกครั้งอย่าลืมเพิ่มและกระทำการเปลี่ยนแปลง แม้ว่านี่อาจจะไม่ใช่เทคนิคที่สวยงาม แต่ก็ใช้งานได้ดีอย่างสมบูรณ์แบบ ระบบไฟล์จะยังไม่รับรู้การเปลี่ยนแปลงของตัวอักษร แต่ git ทำเนื่องจากการเปลี่ยนชื่อเป็นชื่อผู้ใช้ใหม่และนั่นคือทั้งหมดที่เราต้องการ :)
คุณสามารถเปลี่ยนชื่อไดเรกทอรีโดยใช้ระบบไฟล์ จากนั้นคุณสามารถทำgit rm <old directory>
และgit add <new directory>
( หน้าช่วยเหลือ ) จากนั้นคุณสามารถกระทำและผลักดัน
Git จะตรวจสอบว่าเนื้อหาเหมือนกันและเป็นเพียงการดำเนินการเปลี่ยนชื่อและจะปรากฏเป็นรายการเปลี่ยนชื่อในประวัติ คุณสามารถตรวจสอบว่าเป็นกรณีนี้ก่อนที่จะกระทำการใช้git status
จากเว็บแอปพลิเคชันฉันคิดว่าคุณทำไม่ได้ แต่คุณสามารถเปลี่ยนชื่อโฟลเดอร์ทั้งหมดใน Git Client มันจะย้ายไฟล์ของคุณในโฟลเดอร์ที่เปลี่ยนชื่อใหม่แทนที่จะส่งและส่งไปยังที่เก็บระยะไกล
ฉันมีปัญหาที่คล้ายกันมาก: ฉันต้องเปลี่ยนชื่อโฟลเดอร์ที่แตกต่างจากตัวพิมพ์ใหญ่เป็นตัวพิมพ์เล็ก (เช่น Abc -> abc) ฉันได้เปลี่ยนชื่อโฟลเดอร์ทั้งหมดด้วยชื่อดัมมี่ (เช่น 'abc___') และแทนที่จะมุ่งมั่นที่พื้นที่เก็บข้อมูลระยะไกลหลังจาก ฉันเปลี่ยนชื่อโฟลเดอร์ทั้งหมดเป็นชื่อดั้งเดิมด้วยตัวพิมพ์เล็ก (เช่น abc) และใช้ชื่อเหล่านั้น!
ฉันแก้ไขมันในสองขั้นตอน ในการเปลี่ยนชื่อโฟลเดอร์โดยใช้คำสั่ง mv คุณต้องมีสิทธิ์ในการทำเช่นนั้นหากคุณไม่มีสิทธิ์คุณสามารถทำตามขั้นตอนเหล่านี้ สมมติว่าคุณต้องการเปลี่ยนชื่อตัวพิมพ์เล็กและใหญ่เป็นแบบไว
ขั้นตอนที่ 1: เปลี่ยนชื่อโฟลเดอร์ (caseensitive) เป็นอย่างอื่นจาก explorer เช่นเปลี่ยนชื่อ caseensitive เพื่อ folder1 กระทำการเปลี่ยนแปลงนี้
ขั้นตอนที่ 2: เปลี่ยนชื่อโฟลเดอร์ที่เพิ่งตั้งชื่อใหม่นี้ (folder1) เป็นชื่อตัวพิมพ์เล็กและตัวพิมพ์ใหญ่ที่คาดไว้ เปลี่ยนชื่อโฟลเดอร์ 1 เป็นกรณีละเอียด ยอมรับการเปลี่ยนแปลงนี้
สำหรับการเปลี่ยนชื่อตามตัวพิมพ์เล็กและใหญ่git mv somefolder someFolder
ได้ทำงานให้ฉันก่อนหน้านี้ แต่ไม่ได้ใช้ด้วยเหตุผลบางอย่าง ดังนั้นในการแก้ปัญหาฉันจึงสร้างโฟลเดอร์ใหม่temp
ย้ายเนื้อหาทั้งหมดของsomefolder
ไปเป็นtemp
ลบsomefolder
มุ่งมั่นtemp
แล้วสร้างsomeFolder
ย้ายเนื้อหาทั้งหมดของtemp
ไปยังsomeFolder
ลบtemp
กระทำและผลักดันsomeFolder
และทำงานได้! ปรากฏขึ้นsomeFolder
ในระบบคอมไพล์
เพียงเปลี่ยนชื่อโฟลเดอร์ git คือ "content-tracker" ดังนั้นแฮช SHA1 จึงเหมือนกันและ git รู้ว่าคุณเปลี่ยนชื่อมัน สิ่งเดียวที่เปลี่ยนแปลงคือต้นไม้วัตถุ
rm <directory>
git add .
git commit