Git - Не додавати файли?


80

У мене виникають проблеми, коли я не можу додати файли до свого сховища.

Я використовую GIT на вікнах, в Aptana Studio для розробки Ruby.

Мені вдалося перенести кілька файлів на GitHub, але потім після цього все перестало працювати. У мене є, наприклад, нова підпапка в моєму головному каталозі, з 2 рубіновими файлами всередині. Якщо я зателефоную "git add.", А потім "git status", і він продовжує говорити "робочий каталог чистий" і не має чого робити.

Я спробував "git add folder / myfile.rb" і все ще нічого.

Хто-небудь має ідею, що я можу спробувати?


2
Не жартуючи, але спробуйте перезапустити машину
manojlds

Це була якась дурна помилка на моєму боці, я використовую черепаху git, і там є прапорець, коли ви вносите будь-які зміни, це було знято з моєї сторони, і у мене є деякі нові файли лише локально, тому будьте обережні з цим!
BotanMan

1
Я був у підкаталозі проекту smh
Jacksonkr

@Jacksonkr, про це рішення вже повідомляла відповідь gaoagong нижче.
questionto42

Відповіді:


145

Я потрапив у подібну ситуацію, як плакат:

Якщо я зателефоную "git add.", А потім "git status", і він продовжує говорити "робочий каталог чистий" і не має чого робити.

Але я мав інше рішення, ніж те, що тут. Оскільки я прийшов до цього першим, я сподіваюсь заощадити деякий час.

З наведених вище відповідей і того, що я бачив в інших місцях, звичайними виправленнями цієї проблеми є:

  • Переконайтеся, що у відповідному файлі фактично збережено зміни
  • Переконайтеся, що файл не відповідає вашим правилам виключення в .gitignoreта.git/info/exclude
  • Переконайтеся, що не намагаєтесь додати порожню папку. Git їх не відстежує. Стандартним рішенням є розміщення порожнього файлу з іменем.gitkeep як заповнювач, щоб git відстежував папку.

У моєму випадку я спочатку намагався створити репозиторій git навколо існуючого репо (не знаючи, що воно було). Нещодавно я видалив .gitпапку з цього підрепо, але я не розумів, що це було занадто пізно, і git вже відстежував її як підмодуль . Ви можете прочитати більше про те, як вони поводяться та як їх видалити тут , але

  • рішенням для мене було просто бігти git rm --cached path_to_submodule.

29
Спаситель! Мені просто довелося набирати текст, git rm --cached name_of_former_submoduleі він отримав шлях автоматично.
leymannx

8
що таке підмодуль
Мухаммад Умер

як я знаю, чи це моя проблема? Я не знаю, як це розпізнати
PlayHardGoPro


30

Щоб додати до можливих рішень для інших користувачів:

Переконайтеся, що ви не змінили регістр імені папки в Windows:

У мене була подібна проблема, коли папка під назвою SetupGit, розміщена на GitHub, вся розробка велася на машині Windows.

У якийсь момент я змінив папку на setup(нижній регістр S). З цього моменту, коли я додав нові файли до папки налаштування, вони зберігалися в setupпапці, а не в Setupпапці, але я думаю, оскільки я розробляв на машині Windows, існуюча Setupпапка в git / github не була змінена setup.

Результатом стало те, що я не бачив усіх файлів setupу GitHub. Я підозрюю, що якби я клонував проект на машині * nix, то побачив би дві папки, Setupі setup.

Тож переконайтеся, що ви не змінили регістр вміщувальної папки на машині Windows, якщо так, я б запропонував:

  • Перейменування папки в щось на зразок setup-temp
  • git add -A
  • git commit -m "Whatever"
  • Перейменуйте папку на потрібну
  • git add -A
  • git commit -m "Whatever"

7
Це трапилося зі мною також з назвою файлу. Використання git mv -f newFileCase oldFileCase виправить сховище
Брайан ДіКаса

У мене виникла проблема на osx, на жаль, хоча це файлова система * nux, вона зазвичай налаштована як чутлива до регістру, що може спричинити проблеми з * nux-інструментами, такими як git.
Pellet

Дякую, ти врятував мій день
Женя

якщо у вас очікують зміни у файлах із "однаковим ім'ям", але з іншим випадком, це також може спричинити ту саму проблему
Маурісіо Грасія Гутьєррес

Як можна дізнатися oldFileCase, якого очікує git?
diemo

24

Якщо файл виключено користувачем, .gitignoreі ви хочете все-таки додати його, ви можете примусити його за допомогою:

git add -f path/to/file.ext

Дуже дякую! Це мені справді допомогло. З якоїсь причини мій файл був виключений (не був .gitignoreтаким, не впевнений, чому!), І це вирішило мою проблему!
benmaq

13

Дивно, але я всю ніч бився з git, щоб додати файл. Виявляється, це вже було додано. Git не забирав мої зміни, оскільки зміни не зберігалися, оскільки файл був недоступний для мого облікового запису, і моя IDE не повідомляла про це через SSH.

Коротше кажучи, переконайтесь, що у вас його ще не додано до сховища.


1
... думаючи про це, gitміг додати повідомлення, якщо будь-який із заданих шляхів повністю вже знаходиться у сховищі ... це врятувало б щонайменше 13 людей за кілька хвилин.
jjmontes

13

Ще раз перевірте свій .gitignoreфайл, щоб переконатися, що файл може бачити Git. Так само існує файл, .git/info/excludeякий "виключає" файли / каталоги з проекту, як і .gitignoreфайл.


Я б також додав для подвійної перевірки, що файли якимось чином "вже додані" чи ні ...
rogerdpack,

9

У мене щойно була ця проблема, і проблема полягала в тому, що я знаходився всередині каталогу, а не на найвищому рівні. Як тільки я перейшов на вищий рівень, це спрацювало.


2
Я впевнений, що міг використати git add ..або що завгодно потрібно, щоб дійти до рівня, на якому існували мої зміни, і це також могло б спрацювати. Це просто проблема з getcha (моя помилка користувача).
gaoagong

8

Найкраще зробити копію вашої папки. Видалити оригінал. Клонуйте проект із github, скопіюйте нові файли в нову клоновану папку та спробуйте ще раз.


Це спрацювало для мене, використовуючи git на CygWin і отримуючи деякі повідомлення "неправомірні дозволи". Мені навіть не потрібно було клонувати та копіювати змінені файли, я просто продублював каталог, як він був. Я думаю, що примушувати Windows переписувати все означає, що вона виправляє проблеми з дозволами.
RoG

5

У мене була проблема з першою програмою в папці. Я зробив "git add", а потім "git commit". "git status" дав описану помилку, тобто "нічого не фіксувати, робочий каталог чистий"

У підсумку я видалив файл .git із папки програми. Потім я зробив новий git init, git add та git коміт, і це спрацювало.


Для мене все було навпаки. У мене виник конфлікт злиття (перебазування), і мені довелося cdпотрапити до папки до git addфайлу.
LosManos

3

Як щодо стандартної процедури:

git add folder
git commit

Це додасть папку та всі файли за допомогою однієї команди.
Зверніть увагу, git не може зберігати порожні папки.

Якщо коміт не спрацював, перше місце, яке слід перевірити, можливо .gitignore.


6
Зверніть увагу, git не може зберігати порожні папки. ТАЙ!
Бланделл

3

Ось ви можете знайти відповідь на ту ж проблему:

в основному в цьому випадку проблема полягала в ігноруванні global_git


2

У моєму випадку проблему було ввімкнено опцією SafeCrLf. Я на вікнах із черепаховою шкурою. Після відключення опції додавання файлів вже не було проблемою.


2

Іншою проблемою можуть бути дозволи файлів. Спробуйте видати: chmod 755 file1


2

Дурне рішення від мене, але я думав, що воно не додає та не просуває нові файли, оскільки github.com не відображає файли, які я щойно штовхнув. Я забув, що файли, які я додав, знаходяться в іншій гілці. Файли були натиснуті просто чудово. Мені довелося перейти з моєї головної гілки на нову гілку в github, щоб побачити їх. Загубив кілька хвилин на цьому :)


1

Неможливо (для мене) додати перший файл до порожнього сховища, клонованого з GitHub . Вам потрібно перейти за посиланням README, яке пропонує створити GitHub. Після створення першого файлу в Інтернеті ви зможете нормально працювати з git.

Це трапилося зі мною 17 листопада 2016 року.


1

Я все ще новачок у git, і це була просто дурна помилка, яку я допустив, довга історія в одному реченні. Я знаходився не в підпапці, як повідомляв @gaoagong, а навпаки, у батьківській папці. Як не дивно, але з цієї відповіді я не зрозумів ідеї, натомість ідея з’явилася під час тестування git add --all, див. Довгу історію нижче.

Приклад у деталях. Фактичний репо:

введіть тут опис зображення

Батьківська папка, яку я помилково відкрив на батьківському рівні (у моєму випадку vscode_git):

введіть тут опис зображення

Я клонував репо, але у мене була батьківська папка над цим репо, яку я замість цього відкрив, а потім спробував додати файл репозиторію підпапки git add 'd:\Stack Overflow\vscode_git\vscode-java\.github\ISSUE_TEMPLATE.md', який просто нічого не робив, жодного попереджувального повідомлення, а git statusпотім сказав:

нічого не додано до коміту, але наявні невідстежені файли (використовуйте "git add" для відстеження)

введіть тут опис зображення

Біг git add --allдав мені жовті ноти:

попередження: додавання вбудованого сховища git: vscode-java вбудоване сховище і не знатиме, як його отримати.

підказка: Якщо ви мали намір додати підмодуль, використовуйте: git підмодуль add vscode-java

підказка: Якщо ви додали цей шлях помилково, ви можете видалити його з індексу за допомогою git rm --cached vscode-java

Див. "Підмодуль довідки git" для отримання додаткової інформації. Git

введіть тут опис зображення

Щоб виправити це, я повернув за git add --allдопомогою git rm --cached -r -f -- "d:\Stack Overflow\vscode_git\vscode-java" rm 'vscode-java':

введіть тут опис зображення

Потім, просто відкривши фактичну папку репо,

введіть тут опис зображення

git знову запрацював, як очікувалося. Звичайно, тоді папку ".git" батьківської папки можна буде видалити:

введіть тут опис зображення


1

Ви можете видалити рекурсивно git ініціалізоване репо $cd repo added $git rm -rf git

Ви можете створити окрему гілку та зв’язати підмодулі з головною гілкою. Документація на підмодулі справді корисна Документація [https://git-scm.com/book/en/v2/Git-Tools-Submodules]

Також див. Деякі рішення у [/programming/36236484/maintaining-a-git-repo-inside-another-git-repo]


0

Я деякий час шукав, і в підсумку з’ясував, що заблокував порт SSH, саме це призвело до того, що команда git add перестала працювати. У підсумку я змінив походження за допомогою https з такою командою: git remote set-url origin [url-to-git-repo]


0

Я знаю, що це справді давнє запитання, але я знаю, що це може трапитися і з кимось, виявляється, я працював з файлом з іменем AUX.JS, і це зарезервоване ім'я файлу для Windows, це призвело до наступної помилки

fatal: неможливо статизувати 'src / hoc / Aux.js': Немає такого файлу чи каталогу

так що ви можете або видалити файл, або перейменувати його, тоді він буде працювати.

Остаточний висновок, крім усіх інших дійсних відповідей, якщо ви знаходитесь у машині Windows, зверніть увагу на результат команди 'git add', він також може надати додаткову інформацію.


Це теж відбувається у мене в Windows, я використовував git bash в цій ОС, щоб нормально створювати файл Aux.js
Алекс

0

У мене була та сама проблема з репо, яку я клонував із SiteGround Git на свій mac. У щойно клонованому репо було список змінених файлів, якіgit status стверджується, потрібно було додати до коміту, але спроба додати або перевірити будь-який з них взагалі нічого не робила.

З певних причин в іменах файлів відбулися зміни у регістрі (наприклад .jpg -> .JPG). Рішення полягало в простому git mvімені файлу, яке ОС використовувала до імені, яке використовував git, наприклад:

git mv File_That_Wont_Add.txt File_THAT_WONT_Add.txt

0

Нещодавно я зіткнувся з цією проблемою на своєму комп’ютері під управлінням Windows 7. Я використовую інтерфейс командного вікна git. Рішення полягало в тому, щоб бути дуже обережним щодо чутливості до регістру імен файлів та каталогів під час виконання git add. Незважаючи на те, що git не буде скаржитися, якщо справа точно не відповідає випадку файлової системи Windows та назв каталогів, вона також не буде додавати файли. Не було б чого робити. Після того, як я набрав імена файлів із точно правильним регістром, вони будуть додані та перераховані у відповідних змінах, як я задумав.


0

У мене виникла ця проблема у Visual Studio, і мені вдалося: 1- Клацніть правою кнопкою миші на доданий файл, який не розпізнається git. 2- Виберіть "Додати виключений файл до джерела керування"


0

У мене була та сама проблема, і тому, що існувала програма, яка використовує якийсь файл, і git видає помилку, у цьому випадку Visual Studio заблокував цей файл.


0

У мене була проблема, коли файли з однієї папки не додаються до елемента керування джерелом Github. Щоб вирішити це, я видалив папку .git, яка була створена під цією папкою.


0

У мене була подібна проблема.

Проблема полягала в тому, що в Windows, в індексі, файл був доданий у випадку, відмінному від того, що знаходився в нестадійній області. Наприклад, в індексі файл мав ім'я, xx.txtа в нестадійній області файл - імена Xx.txt.

Видалено файл із неправильним регістром з індексу ( xx.txt). Тоді я зміг додати файл із правильним регістром ( Xx.txt).


0

Проблема git не додасть змінений файл. За допомогою git bash я змінив папку, відокремлюючи назву папки подвійними лапками. ls відображав вміст папки правильно, але git не додав змінені файли.

Рішення Я використовував одинарну лапку для розмежування назви папки.

наприклад, CD "Ім'я папки" git статус нічого не фіксувати, робоче дерево очищає CD. ls 'Ім'я папки' CD 'Ім'я папки' git статус змінено: ModifiedFileName.bat


0

Я спробував усе вищесказане, але нічого не працювало. Пізніше я запустив свій командний рядок як адміністратор і спробував усі етапи, тобто етап -> комітування -> віддалене додавання -> натискання. Це спрацювало як магія. Зміни були відображені у бажаному віддаленому сховищі.

Сподіваюся, це допоможе :) Зберігайте спокій і продовжуйте кодувати.

PS Я нова бджола і намагаюся вчитися на помилці.


0

Подібне трапилось і зі мною, коли я перейменував файл між Uppercase/Lowercase. Отже, тимчасове перейменування файлів може вирішити проблему.


0

У таких випадках перевірте наявність правил у глобальному файлі .gitignore та переконайтесь, що ваша папка не відповідає цим.


0

Ось як я змусив свою працювати:

Я почав з

git init 

всередині каталогу з усіма файлами / папками, які я хотів включити.

Я побіг

git add --all
git add .
git commit -m "uploaded fixed sources 3"
git push origin master

ТОДІ

Я створив інший каталог за межами джерела, я перейшов у цей каталог, потім клонував існуюче репозиторій git, використовуючи файл http: //../../.git, як вказано на сторінці в github.

Після клонування джерела (яке не мало нічого іншого, як readme.md), я скопіював усі файли зі старого каталогу у новий за допомогою

cp -rf ../../* .

Потім я додав ще раз, а потім зафіксував і відсунув ці зміни.

git add --all
git add .
git commit -m "uploaded fixed sources 4"
git push origin master

Не питайте мене, чому, але цього разу вони завантажились на сайт github і з’явились у вигляді файлів, до яких ви можете отримати доступ у .zip tarball.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.