Rekurencyjnie dodaj cały folder do repozytorium


250

Próbuję dodać gałąź do gałęzi głównej w GitHub i wypchnąć folder do tej gałęzi.

Struktura folderów oddziału wygląda następująco - SocialApp / SourceCode / DevTrunk / SocialApp, a wszystkie pliki kodu źródłowego znajdują się w ostatnim folderze.

Korzystam z następujących poleceń Git:

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

Spycha to tylko pierwszy folder „SocialApp” na GitHub i ignoruje folder SourceCode znajdujący się w folderze. Jak to naprawić?


4
czy są gdzieś pliki? czy oni nie są ignorowani .gitignore?
CharlesB

This is pushing only the first folder- git wcale nie dba o foldery, tylko pliki. pokaż zatwierdzenie - popełniłeś podmoduł, dowiązanie symboliczne lub coś innego, co nie jest folderem
AD7six

Mam ten sam problem. Nie sądzę, że jest to problem, ale tylko oczekiwane zachowanie. Zaskakujące jest tak wiele rozwiązań.

Uwaga: gdy foldery są puste, nie są śledzone. dobrą praktyką jest umieszczanie w nim pustego pliku .keep w celu przechowywania pustych katalogów
Koleś

Odpowiedzi:


356

Sprawdź .gitignoreplik, jeśli podkatalog jest ignorowany.

Następnie spróbuj ponownie

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

4
Pamiętaj, że nie będzie to obejmować plików wymienionych w .gitignore. Zazwyczaj dodaję je ręcznie lub używam pliku wsadowego takiego: for /R %%f in (*.*) do git add --force %%f(patrz bitbucket.org/jeroenp/besharp.net/src/tip/Scripts/GIT/… )
Jeroen Wiert Pluimers

9
Aby rekurencyjnie dodać całą strukturę drzewa folderu, polecenie powinno brzmiećgit add --all :/
Jason Hartley

7
@JeroenWiertPluimers git add -f -allpracuje nad dodaniem plików
.gitignored

3
@JasonHartley Twój komentarz może być odpowiedzią. Dzięki!
ShutUpMagda

4
Czy to nie dodaje wszystkich niestacjonarnych plików do repozytorium git, a nie tylko bieżącego folderu? Nie sądzę, że o to pyta oryginalne pytanie.
Ted

31

To działało dla mnie:

git add . --force

1
Inne odpowiedzi wymagają obliczenia listy plików jako argumentu dla polecenia, ta nie, dlatego jest lepszym wyborem.
topkara,

3
Zdecydowanie najlepsza odpowiedź. Jedną zmianą byłoby wspomnienie, że nie potrzebujesz, --forcejeśli chcesz, aby ignorowania były nadal przestrzegane.
GrafikRobot,

31

SETUP - lokalne repozytorium na lokalnym serwerze - klient jest podłączony do lokalnego serwera za pośrednictwem sieci LAN

git add foldername/\\*

Aby dostać się na serwer ...

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

Przeważnie użytkownicy przypiszą nazwę zdalnego_serwera jako pochodzenie ...

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

9
Nie powiodło się jako fatal: pathspec 'foldername/\\*' did not match any files. Pracował jako git add foldername/\*.
Tpojka

Jaka jest różnica między git add foldername/\\*i git add --all?
Danijel

17

Zarówno „git add *”, jak i „git add SocialApp” wywoływane z głównego katalogu powinny rekurencyjnie dodawać wszystkie katalogi.

Prawdopodobnie nie masz plików w SocialApp / SourceCode / DevTrunk / SocialApp i to jest powód.

Spróbuj wywołać „dotknij SocialApp / SourceCode / DevTrunk / SocialApp / .temporary” (i sprawdź .gitignore), a następnie spróbuj ponownie dodać git.


2
Nie sądzę, używam git add * i mam ten sam problem.

16

W moim przypadku w podkatalogu był folder .git, ponieważ wcześniej zainicjowałem tam repozytorium git. Kiedy dodałem podkatalog, po prostu dodałem go jako podprojekt bez dodawania żadnego z zawartych plików.

Rozwiązałem problem, usuwając repozytorium git z podkatalogu, a następnie ponownie dodając folder.


To rozwiązało dla mnie. Musiałem także zmienić nazwę samego folderu, aby wprowadzić poprawkę.
Totem

6

Po prostu użyłem tego:

git add app/src/release/*

Musisz tylko określić folder, który chcesz dodać, a następnie użyj, *aby dodać wszystko, co jest w środku rekurencyjnie.


5

Wpadłem na ten problem, który kosztował mnie trochę czasu, a potem przypomniałem sobie, że git nie będzie przechowywać pustych folderów. Pamiętaj, że jeśli masz drzewo folderów, które chcesz przechowywać, umieść plik w co najmniej najgłębszym folderze tego drzewa, coś w rodzaju pliku o nazwie „.gitkeep”, aby wpłynąć na przechowywanie przez git.


5

Jeśli chcesz dodać katalog i wszystkie znajdujące się w nim pliki rekurencyjnie, przejdź do katalogu, w którym znajduje się katalog, który chcesz dodać.

$ cd directory
$ git add directoryname

1
katalog cd git add *
François Richard

3

Miałem również ten sam problem i nie mam pliku .gitignore. Mój problem został rozwiązany w następujący sposób. Zajęło to wszystkie podkatalogi i pliki.

git add <directory>/*

1

Czasami chcę dołączyć kody źródłowe moich usług sieciowych wraz z projektem po stronie klienta. Oba mają osobne repozytoria git. Jestem przyzwyczajony do dodawania wszystkich plików za pomocą polecenia:

git add -A

Ale z jakiegoś powodu dodaje tylko folder. Później dowiedziałem się, że pliki serwera również mają swój .gitfolder, więc polecenie nie działa.

tl; dr : Upewnij się, że .gitw folderze nie ma folderu, który chcesz wystawić.


1
Jak obejść ten problem, jeśli nie chcesz usuwać folderów .git?
rzuca

@rolls patrz git submodules
mr5

1

Przejdź do folderu, w którym masz swoje pliki,
jeśli jesteś na komputerze z systemem Windows, musisz uruchomić git bash, z którego otrzymasz interfejs wiersza poleceń, a następnie użyj tych poleceń

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

jeśli dokonasz jakichkolwiek zmian w plikach przed scaleniem ich z wzorcem, musisz zatwierdzić zmiany poprzez wykonanie

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

Po tej kasie oddział do gałęzi master


Odpowiedz tylko na te wzmiankiinit
Atul

1

Scenariusz / Rozwiązanie 1:
Upewnij się, że twojego Folder/ Sub-foldernie ma w .gitignorepliku, przypadkiem.


Scenariusz / Rozwiązanie 2:
Domyślnie git add .działa rekurencyjnie.


Scenariusz / Rozwiązanie 3:
git add --all :/ działa płynnie tam, gdzie git add .nie działa (działa).
(@ Komentarz JasonHartley)


Scenariusz / Rozwiązanie 4:
Problem, z którym osobiście się spotkałem, polegał na dodawaniu Subfolders or Files, które były wspólne dla wielu Folders.

Na przykład:
Folder/Subfolder-L1/Subfolder-L2/...file12.txt
Folder/Subfolder-L1/Subfolder-L2/Subfolder-L3/...file123.txt
Folder/Subfolder-L1/...file1.txt

Tak Gitpolecił mi dodać git submodule, co próbowałem, ale było to uciążliwe.


Wreszcie działało dla mnie:

1. git addjeden plik na ostatnim końcu / poziomie pliku Folder.
Na przykład:
git add Folder/Subfolder-L1/Subfolder-L2/Subfolder-L3/...file123.txt

2. git add --all :/teraz.
To będzie bardzo szybko dodać wszystko Folders, Subfoldersi files.



Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.