Adicione recursivamente a pasta inteira a um repositório


250

Estou tentando adicionar um ramo ao ramo mestre no GitHub e enviar uma pasta para esse ramo.

A estrutura de pastas da ramificação se parece com - SocialApp / SourceCode / DevTrunk / SocialApp e todos os arquivos de código-fonte estão na última pasta.

Estou usando os seguintes comandos Git:

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

Isso está enviando apenas a primeira pasta "SocialApp" para o GitHub e ignorando a pasta SourceCode que está dentro da pasta. Como faço para corrigir isso?


4
existem arquivos em algum lugar? eles não são ignorados .gitignore?
precisa

This is pushing only the first folder- o git não se importa com pastas, apenas arquivos. por favor mostre a comprometer - você quer cometeu um sub-módulo, um link simbólico ou qualquer outra coisa que não é uma pasta
AD7six

Estou tendo o mesmo problema. Eu não acho que isso seja um problema, mas apenas o comportamento esperado. Surpreendente, existem tantas soluções.

nota: quando suas pastas estão vazias, elas não são rastreadas. é uma boa prática para colocar um arquivo .mantenha vazio lá para manter os diretórios vazios
Cara

Respostas:


356

Verifique o .gitignorearquivo, se o subdiretório for ignorado.

Então tente novamente

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

4
Observe que isso não incluirá os arquivos mencionados em .gitignore. Eu costumo acrescentar aqueles à mão ou usar um arquivo de lote como esta: for /R %%f in (*.*) do git add --force %%f(ver bitbucket.org/jeroenp/besharp.net/src/tip/Scripts/GIT/... )
Jeroen Wiert Pluimers

10
Para adicionar recursivamente toda a estrutura em árvore da pasta, o comando deve sergit add --all :/
Jason Hartley

7
@JeroenWiertPluimers git add -f -alltrabalha para adicionar arquivos .gitignored
Orwellophile

3
@JasonHartley Seu comentário pode ser uma resposta. Obrigado!
ShutUpMagda 21/01

4
Isso não adiciona todos os arquivos não estágios no repositório git, não apenas a pasta atual? Eu não acho que é o que a pergunta original está fazendo.
Ted

31

Isso funcionou para mim:

git add . --force

1
As outras respostas exigem que a lista de arquivos seja computada como um argumento para o comando, este não, portanto, é uma escolha melhor.
Topkara 01/09

3
Definitivamente, a melhor resposta. Uma edição seria mencionar que você não precisa --forcese quiser que os ignores sejam respeitados.
precisa saber é o seguinte

31

SETUP - repositório local em um servidor local - o cliente está conectado ao servidor local via LAN

git add foldername/\\*

Para chegar ao servidor ...

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

Principalmente, os usuários atribuirão remote_server_name como origem ...

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

9
Falhou como fatal: pathspec 'foldername/\\*' did not match any files. Trabalhou como git add foldername/\*.
Tpojka

Qual é a diferença entre git add foldername/\\*e git add --all?
Danijel

17

"Git add *" e "git add SocialApp" chamados do diretório superior devem adicionar recursivamente todos os diretórios.

Provavelmente você não possui arquivos no SocialApp / SourceCode / DevTrunk / SocialApp e esse é o motivo.

Tente chamar "toque em SocialApp / SourceCode / DevTrunk / SocialApp / .temporary" (e marque .gitignore) e tente o git add novamente.


2
Eu acho que não, eu uso o git add * e estou tendo o mesmo problema.

16

No meu caso, havia uma pasta .git no subdiretório porque eu havia inicializado anteriormente um repositório git lá. Quando adicionei o subdiretório, ele simplesmente foi adicionado como um subprojeto sem adicionar nenhum dos arquivos contidos.

Resolvi o problema removendo o repositório git do subdiretório e adicionando novamente a pasta.


Isso resolveu para mim. Eu também tive que mudar o nome da pasta em si para a correção para chutar.
Totem

6

Eu simplesmente usei isso:

git add app/src/release/*

Você só precisa especificar a pasta a ser adicionada e, em seguida, usar *para adicionar tudo o que está dentro recursivamente.


5

Corri para esse problema que me custou um pouco de tempo, depois lembrei que o git não armazena pastas vazias. Lembre-se de que se você tiver uma árvore de pastas que deseja armazenar, coloque um arquivo pelo menos na pasta mais profunda dessa árvore, algo como um arquivo chamado ".gitkeep", apenas para afetar o armazenamento pelo git.


5

Se você deseja adicionar um diretório e todos os arquivos localizados nele recursivamente, vá para o diretório em que o diretório que você deseja adicionar está localizado.

$ cd directory
$ git add directoryname

1
diretório cd git add *
François Richard

3

Eu também tive o mesmo problema e não tenho o arquivo .gitignore. Meu problema foi resolvido da seguinte maneira. Isso levou todos os subdiretórios e arquivos.

git add <directory>/*

1

Há momentos em que desejo incluir meus códigos-fonte de serviço da Web junto com seu projeto do lado do cliente. Ambos têm repositórios git separados. Na verdade, estou acostumado a adicionar todos os arquivos usando o comando:

git add -A

Mas, por algum motivo, apenas adiciona a pasta. Mais tarde, descobri que os arquivos do servidor também têm sua .gitpasta, para que o comando não funcione.

tl; dr : Verifique se não há .gitpastas dentro da pasta que você deseja montar.


1
Como você pode contornar isso se você não deseja remover as pastas .git?
rola

@rolls see submodules git
mr5

1

Navegue até a pasta onde você tem seus arquivos.
Se você estiver em uma máquina Windows, será necessário iniciar o git bash a partir do qual você obterá uma interface de linha de comando e, em seguida, usará estes comandos.

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

se você fizer alguma alteração nos arquivos antes de mesclá-lo ao mestre, precisará confirmar as alterações executando

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

Após este checkout, a ramificação para a ramificação mestre


Apenas responda que mencionainit
Atul

1

Cenário / Solução 1:
verifique se seu Folder/ Sub-foldernão está no .gitignorearquivo, por acaso.


Cenário / Solução 2:
Por padrão, git add .funciona recursivamente.


Cenário / Solução 3:
git add --all :/ funciona sem problemas, onde git add .não funciona (funciona).
(@ JasonHartley comenta)


Cenário / Solução 4:
O problema que eu pessoalmente enfrentei foi adicionar Subfolders or Files, que eram comuns entre vários Folders.

Por exemplo:
Folder/Subfolder-L1/Subfolder-L2/...file12.txt
Folder/Subfolder-L1/Subfolder-L2/Subfolder-L3/...file123.txt
Folder/Subfolder-L1/...file1.txt

Então, Gitestava me recomendando adicionar git submodule, o que eu tentei, mas foi uma dor.


Finalmente, o que funcionou para mim foi:

1. git addum arquivo que está no último final / nível de a Folder.
Por exemplo:
git add Folder/Subfolder-L1/Subfolder-L2/Subfolder-L3/...file123.txt

2. git add --all :/agora.
Ele rapidamente adicionará todo o Folders, Subfolderse files.



Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.