Рекурсивно добавить всю папку в хранилище

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- git вообще не заботится о папках, только файлы. покажите коммит - вы либо зафиксировали субмодуль, символическую ссылку или что-то еще, что не является папкой
AD7six
У меня такая же проблема. Я не думаю, что это проблема, а просто ожидаемое поведение. Удивительно, что есть так много решений.
примечание: когда ваши папки пусты, они не отслеживаются. Хорошей практикой является размещение пустого файла .keep для хранения пустых каталогов
Чувак

Ответы:

356

Проверьте .gitignoreфайл, если подкаталог игнорируется.

Тогда попробуйте еще раз

git add --all
git commit -am "<commit message>"
git push
beyersdorfinger
источник
4
Обратите внимание, что это не будет включать файлы, упомянутые в .gitignore. Я обычно добавляю их вручную или использую командный файл, например, так: for /R %%f in (*.*) do git add --force %%f(см. Bitbucket.org/jeroenp/besharp.net/src/tip/Scripts/GIT/… )
Йерун Вирт Плуимерс
10
Чтобы рекурсивно добавить всю древовидную структуру папки, команда должна бытьgit add --all :/
Джейсон Хартли,
7
@JeroenWiertPluimers git add -f -allработает над добавлением .gitignored файлов
Orwellophile
3
@JasonHartley Ваш комментарий может быть ответом. Спасибо!
ShutUpMagda
4
Разве это не добавляет все неотмеченные файлы в репозиторий git, а не только текущую папку? Я не думаю, что это то, что задает оригинальный вопрос.
Тед
31

Это сработало для меня:

git add . --force
ykay
источник
1
Другие ответы требуют, чтобы список файлов вычислялся как аргумент команды, а этого нет, поэтому это лучший выбор.
Топкара
3
Определенно лучший ответ. Одна редакция - упомянуть, что вам не нужно, --forceесли вы хотите, чтобы игнорирование все еще соблюдалось.
ГрафикРобот
31

SETUP - локальный репозиторий на локальном сервере - клиент подключен к локальному серверу через локальную сеть

git add foldername/\\*

Сделать это на сервер ...

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

В основном пользователи будут назначать имя_удаленного_сервера как источник ...

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/\*.
Тпойка
Какая разница между git add foldername/\\*а git add --all?
Даниэль
17

Вызываемые из верхнего каталога git add * и git add SocialApp должны рекурсивно добавлять все каталоги.

Вероятно, у вас нет файлов в SocialApp / SourceCode / DevTrunk / SocialApp, и это причина.

Попробуйте вызвать «touch SocialApp / SourceCode / DevTrunk / SocialApp / .teven» (и проверьте .gitignore), а затем попробуйте git add еще раз.

nopsoft
источник
2
Я так не думаю, я использую git add * и у меня та же проблема.
16

В моем случае в подкаталоге была папка .git, потому что я ранее инициализировал там git-репо. Когда я добавил подкаталог, он просто добавил его как подпроект, не добавляя ни одного из содержащихся файлов.

Я решил проблему, удалив репозиторий git из подкаталога, а затем заново добавив папку.

рассеивать
источник
Это решило это для меня. Мне также пришлось переименовать саму папку для исправления, чтобы сработать.
Тотем
6

Я просто использовал это:

git add app/src/release/*

Вам просто нужно указать папку для добавления, а затем использовать *для рекурсивного добавления всего, что находится внутри.

Хайме Монтойя
источник
5

Я столкнулся с этой проблемой, которая стоила мне немного времени, затем вспомнил, что git не будет хранить пустые папки. Помните, что если у вас есть дерево папок, которое вы хотите сохранить, поместите файл как минимум в самую глубокую папку этого дерева, что-то вроде файла .gitkeep, просто чтобы повлиять на хранилище с помощью git.

user2989397
источник
5

Если вы хотите добавить каталог и все файлы, которые находятся внутри него рекурсивно, перейдите в каталог, где находится каталог, который вы хотите добавить.

$ cd directory
$ git add directoryname
user7205168
источник
1
каталог cd git add *
Франсуа Ричард
3

У меня тоже была такая же проблема, и у меня нет файла .gitignore. Моя проблема была решена следующим образом. Это заняло все подкаталоги и файлы.

git add <directory>/*
Суяш Джайн
источник
1

Бывают моменты, когда я хочу включить исходные коды моего веб-сервиса вместе с его клиентским проектом. У них обоих есть отдельные репозитории git. Я на самом деле привык добавлять все файлы с помощью команды:

git add -A

Но по какой-то причине он только добавляет папку. Позже я узнал, что в файлах сервера также есть .gitпапка, поэтому команда не работает.

tl; dr : убедитесь, что .gitв папке, которую вы хотите разместить , нет папок.

MR5
источник
1
Как обойти это, если вы не хотите удалять папки .git?
катится
@rolls смотри подмодули git
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
Атул
1

Сценарий / Решение 1:
Убедитесь, что ваш Folder/ Sub-folderнет в .gitignoreфайле, случайно.


Сценарий / решение 2:
по умолчанию git add .работает рекурсивно.


Сценарий / Решение 3:
git add --all :/ работает гладко, где git add .нет (работает).
(@ Джейсон Хартли комментарий)


Сценарий / Решение 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, Subfoldersи files.


Nayyar
источник
-2

Это сработало для меня

git add -f *
Амин Сехаба
источник