เพิ่มทั้งโฟลเดอร์ซ้ำ ๆ ในที่เก็บซ้ำ


250

ฉันกำลังพยายามเพิ่มสาขาในสาขาหลักบน GitHub และผลักโฟลเดอร์ไปยังสาขานั้น

โครงสร้างโฟลเดอร์ของสาขาดูเหมือน - SocialApp / SourceCode / DevTrunk / SocialApp และไฟล์ซอร์สโค้ดทั้งหมดอยู่ในโฟลเดอร์สุดท้าย

ฉันใช้คำสั่ง Git ต่อไปนี้:

git add *
git commit -m with the message
git push

นี่เป็นการผลักเฉพาะโฟลเดอร์แรก "SocialApp" ไปยัง GitHub และละเว้นโฟลเดอร์ SourceCode ที่อยู่ภายในโฟลเดอร์ ฉันจะแก้ไขสิ่งนี้ได้อย่างไร


4
มีไฟล์ที่ไหนบ้าง? พวกเขาไม่สนใจ.gitignoreเหรอ?
CharlesB

This is pushing only the first folder- คอมไพล์ไม่สนใจโฟลเดอร์เลยไฟล์เท่านั้น กรุณาแสดงการกระทำ - คุณได้ทำ submodule, symlink หรืออย่างอื่นที่ไม่ใช่โฟลเดอร์
AD7six

ฉันมีปัญหาเดียวกันนี้ ฉันไม่คิดว่านี่เป็นปัญหา แต่เป็นเพียงพฤติกรรมที่คาดหวัง น่าแปลกใจที่มีวิธีแก้ปัญหามากมาย

หมายเหตุ: เมื่อโฟลเดอร์ของคุณว่างเปล่าพวกเขาจะไม่ถูกติดตาม เป็นวิธีปฏิบัติที่ดีในการใส่ไฟล์. keep ที่ว่างไว้ในนั้นเพื่อเก็บไดเรกตอรีที่ว่างเปล่าไว้
Dude

คำตอบ:


356

ตรวจสอบ.gitignoreไฟล์หากไม่สนใจไดเรกทอรีย่อย

จากนั้นลองอีกครั้ง

git add --all
git commit -am "<commit message>"
git push

4
โปรดทราบว่านี่จะไม่รวมไฟล์ที่กล่าวถึงใน. gitignore ฉันมักจะเพิ่มเหล่านั้นด้วยมือหรือใช้ไฟล์ชุดเช่นนี้for /R %%f in (*.*) do git add --force %%f(ดูbitbucket.org/jeroenp/besharp.net/src/tip/Scripts/GIT/... )
Jeroen Wiert Pluimers

10
หากต้องการเพิ่มโครงสร้างทรีทั้งหมดของโฟลเดอร์ซ้ำ ๆ คำสั่งควรเป็นgit add --all :/
Jason Hartley

7
@JeroenWiertPluimers git add -f -allทำงานเพื่อเพิ่ม. gitignored ไฟล์
Orwellophile

3
@JasonHartley ความคิดเห็นของคุณอาจเป็นคำตอบ ขอบคุณ!
ShutUpMagda

4
สิ่งนี้ไม่ได้เพิ่มไฟล์ที่ไม่มีการจัดเก็บทั้งหมดใน git repo ไม่ใช่แค่โฟลเดอร์ปัจจุบันใช่ไหม ฉันไม่คิดว่ามันเป็นคำถามเดิมที่ถาม
เท็ด

31

สิ่งนี้ใช้ได้กับฉัน:

git add . --force

1
คำตอบอื่น ๆ ต้องการรายชื่อไฟล์ที่จะคำนวณเป็นอาร์กิวเมนต์สำหรับคำสั่งคำสั่งนี้ไม่ได้ดังนั้นจึงเป็นตัวเลือกที่ดีกว่า
topkara

3
คำตอบที่ดีที่สุดแน่นอนหนึ่งการแก้ไขจะพูดถึงว่าคุณไม่จำเป็นต้อง--forceถ้าคุณต้องการละเว้นยังคงได้รับการเคารพ
GrafikRobot

31

การตั้งค่า - ที่เก็บข้อมูลโลคัลที่เซิร์ฟเวอร์ภายในเครื่อง - ไคลเอ็นต์เชื่อมต่อกับเซิร์ฟเวอร์ในระบบผ่าน LAN

git add foldername/\\*

เพื่อไปยังเซิร์ฟเวอร์ ...

git commit -m "comments..."
git push remote_server_name master

ผู้ใช้ส่วนใหญ่จะกำหนด remote_server_name เป็นจุดเริ่มต้น ...

git remote add remote_server_name username@git_server_ip:/path/to/git_repo

9
fatal: pathspec 'foldername/\\*' did not match any filesล้มเหลว git add foldername/\*ทำงานเป็น
Tpojka

ความแตกต่างระหว่างgit add foldername/\\*และgit add --allคืออะไร
Danijel

17

ทั้ง "git add *" และ "git add SocialApp" ที่เรียกจากไดเรกทอรีบนสุดควรเพิ่มไดเรกทอรีทั้งหมดแบบเรียกซ้ำ

อาจเป็นเพราะคุณไม่มีไฟล์ใน SocialApp / SourceCode / DevTrunk / SocialApp และนี่คือเหตุผล

ลองโทร "แตะ SocialApp / SourceCode / DevTrunk / SocialApp /. ชั่วคราว" (และตรวจสอบ. gitignore) จากนั้นลอง git เพิ่มอีกครั้ง


2
ฉันไม่คิดอย่างนั้นฉันใช้ git add * และมีปัญหาเดียวกัน

16

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

ฉันแก้ไขปัญหาโดยการลบที่เก็บ git ออกจากไดเรกทอรีย่อยแล้วเพิ่มโฟลเดอร์อีกครั้ง


วิธีนี้แก้ไขได้สำหรับฉัน ฉันต้องเปลี่ยนชื่อโฟลเดอร์เองเพื่อให้แก้ไขได้
Totem

6

ฉันแค่ใช้สิ่งนี้:

git add app/src/release/*

คุณเพียงแค่ต้องระบุโฟลเดอร์ที่จะเพิ่มจากนั้นใช้*เพื่อเพิ่มทุกอย่างที่อยู่ข้างในซ้ำ


5

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


5

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

$ cd directory
$ git add directoryname

1
ไดเรกทอรี cd git เพิ่ม *
François Richard

3

ฉันมีปัญหาเดียวกันและฉันไม่มีไฟล์. gitignore ปัญหาของฉันได้รับการแก้ไขด้วยวิธีต่อไปนี้ สิ่งนี้นำไดเรกทอรีย่อยและไฟล์ทั้งหมด

git add <directory>/*

1

มีบางครั้งที่ฉันต้องการรวมซอร์สโค้ดบริการเว็บของฉันพร้อมกับโครงการฝั่งไคลเอ็นต์ ทั้งคู่มีที่เก็บคอมไพล์แยกกัน ฉันใช้เพื่อเพิ่มไฟล์ทั้งหมดโดยใช้คำสั่ง:

git add -A

แต่ด้วยเหตุผลบางอย่างเพียงเพิ่มโฟลเดอร์เท่านั้น ต่อมาฉันพบว่าไฟล์เซิร์ฟเวอร์ยังมี.gitโฟลเดอร์อยู่ในนั้นเพื่อให้คำสั่งไม่ทำงาน

tl; dr : ตรวจสอบให้แน่ใจว่าไม่มี.gitโฟลเดอร์อยู่ในโฟลเดอร์ที่คุณต้องการสเตจ


1
คุณจะหลีกเลี่ยงสิ่งนี้ได้อย่างไรถ้าคุณไม่ต้องการลบโฟลเดอร์. git?
ม้วน

@ ม้วนดูgit submodules
mr5

1

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

git init   //this initializes a .git  repository in your working directory

git remote add origin <URL_TO_YOUR_REPO.git> // this points to correct repository where files will be uploaded

git add *   // this adds all the files to the initialialized git repository

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

git commit -m "applied some changes to the branch"

หลังจากชำระเงินนี้สาขาไปยังสาขาหลัก


ตอบเฉพาะที่กล่าวถึงinit
Atul

1

สถานการณ์ / โซลูชันที่ 1:
ตรวจสอบว่าFolder/ ของคุณSub-folderไม่ได้อยู่ใน.gitignoreไฟล์โดยโอกาสใด ๆ


สถานการณ์ / โซลูชัน 2:
โดยค่าเริ่มต้นgit add .ทำงานซ้ำ


สถานการณ์ / โซลูชันที่ 3:
git add --all :/ทำงานได้อย่างราบรื่นgit add .ไม่ทำงาน (ไม่ทำงาน)
(ความคิดเห็นของ @ JasonHartley)


สถานการณ์ / โซลูชันที่ 4:
ปัญหาที่ฉันเผชิญเป็นส่วนตัวเพิ่มSubfolders or Filesขึ้นซึ่งเป็นเรื่องปกติระหว่างหลาย ๆFoldersซึ่งอยู่ร่วมกันระหว่างหลาย ๆ

ตัวอย่างเช่น:
Folder/Subfolder-L1/Subfolder-L2/...file12.txt
Folder/Subfolder-L1/Subfolder-L2/Subfolder-L3/...file123.txt
Folder/Subfolder-L1/...file1.txt

ดังนั้นGitแนะนำให้ฉันเพิ่มgit submoduleซึ่งฉันพยายาม แต่ก็เจ็บปวด


ในที่สุดสิ่งที่ได้ผลสำหรับฉันก็คือ:

1. git addไฟล์หนึ่งไฟล์ที่ส่วนท้าย / ระดับสุดท้ายของFolderไฟล์
ตัวอย่างเช่น:
git add Folder/Subfolder-L1/Subfolder-L2/Subfolder-L3/...file123.txt

2. git add --all :/ตอนนี้
มันจะมากได้อย่างรวดเร็วเพิ่มทั้งหมดFolders, และ Subfoldersfiles



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