Git - nie dodasz plików?

80

Mam problemy, gdy nie mogę dodać plików do mojego repozytorium.

Używam GIT w systemie Windows, w Aptana Studio do programowania w języku Ruby.

Udało mi się przesłać kilka plików do GitHub, ale potem wszystko przestało działać. Na przykład mam nowy podfolder w moim katalogu głównym, w którym znajdują się 2 pliki ruby. Jeśli wywołam „git add.”, A potem „git status”, to ciągle mówi „work directory clean” i nie ma nic do zatwierdzenia.

Próbowałem "git add folder / myfile.rb" i nadal nic.

Czy ktoś ma pomysł, co mogę spróbować?

Martin Blore
źródło
2
Nie żartuję, ale spróbuj ponownie uruchomić maszynę
manojlds
To był jakiś głupi błąd z mojej strony, używam żółwia git i jest tam pole wyboru, kiedy zatwierdzasz jakiekolwiek zmiany, nie było zaznaczone po mojej stronie i mam kilka nowych plików tylko lokalnie, więc bądź ostrożny!
BotanMan
1
Byłem w podkatalogu projektu smh
Jacksonkr
@Jacksonkr, to rozwiązanie zostało już zgłoszone przez odpowiedź gaoagong poniżej.
pytanie

Odpowiedzi:

146

Znalazłem się w podobnej sytuacji jak plakat:

Jeśli wywołam „git add.”, A potem „git status”, to ciągle mówi „roboczy katalog czysty” i nie ma nic do zatwierdzenia.

Ale miałem inne rozwiązanie niż to, co tutaj. Odkąd doszedłem do tego jako pierwszy, mam nadzieję, że zaoszczędzę innym trochę czasu.

Na podstawie powyższych odpowiedzi i tego, co widziałem w innym miejscu, typowe poprawki tego problemu to:

  • Upewnij się, że w danym pliku są rzeczywiście zapisane zmiany
  • Upewnij się, że plik nie spełnia reguł wykluczania w .gitignorei.git/info/exclude
  • Upewnij się, że nie próbujesz dodać pustego folderu. Git nie będzie ich śledzić. Standardowym rozwiązaniem jest umieszczenie pustego pliku nazwanego .gitkeepjako symbol zastępczy, aby git śledził folder.

W moim przypadku początkowo próbowałem utworzyć repozytorium git wokół istniejącego repozytorium (nie wiedząc, że tam jest). Usunąłem .gitfolder z tego repozytorium podrzędnego jakiś czas temu, ale nie zdawałem sobie sprawy, że jest za późno, a git już go śledził jako podmoduł . Możesz przeczytać więcej o tym, jak się zachowują i jak je usunąć tutaj , ale

  • rozwiązaniem dla mnie było po prostu bieganie git rm --cached path_to_submodule.
zrisher
źródło
29
Ratownik! Po prostu musiałem wpisać, git rm --cached name_of_former_submodulea ścieżka otrzymała automatycznie.
leymannx
8
co to jest podmoduł
Muhammad Umer
skąd mam wiedzieć, czy to mój problem? Nie wiem, jak to rozpoznać
PlayHardGoPro,
1
@MuhammadUmer Strona podmodułu w oficjalnym pliku Readme Git wyjaśnia ich bardziej szczegółowo.
zrisher
30

Aby dodać do możliwych rozwiązań dla innych użytkowników:

Upewnij się, że nie zmieniłeś wielkości liter w nazwie folderu w systemie Windows:

Miałem podobny problem, gdy folder o nazwie Setupkontrolowany przez Git i hostowany na GitHub, cały rozwój był wykonywany na komputerze z systemem Windows.

W pewnym momencie zmieniłem folder na setup(małe litery S). Od tego momentu, kiedy dodałem nowe pliki do folderu instalacyjnego, były one przechowywane w setupfolderze, a nie w Setupfolderze, ale myślę, że ponieważ tworzyłem na komputerze z systemem Windows, istniejący Setupfolder w git / github nie został zmieniony na setup.

W rezultacie nie mogłem zobaczyć wszystkich plików setupw GitHub. Podejrzewam, że gdybym sklonował projekt na komputerze * nix, zobaczyłbym dwa foldery Setupi setup.

Więc upewnij się, że nie zmieniłeś wielkości liter folderu zawierającego na komputerze z systemem Windows, jeśli tak, zasugerowałbym:

  • Zmieniam nazwę folderu na podobną setup-temp
  • git add -A
  • git commit -m "Whatever"
  • Zmień nazwę folderu z powrotem na żądaną
  • git add -A
  • git commit -m "Whatever"
antfx
źródło
7
Zdarzyło mi się to również z nazwą pliku. Użycie git mv -f newFileCase oldFileCase poprawi repozytorium
Brian DiCasa Kwietnia
Miałem problem ze skrzynką na osx, niestety, mimo że jest to system plików * nux, jest on generalnie skonfigurowany jako niewrażliwy na wielkość liter, co może powodować problemy z narzędziami * nux, takimi jak git.
Pellet
Dzięki, uratowałeś mi dzień
Zhenya
jeśli masz oczekujące zmiany w plikach o „tej samej nazwie”, ale z innym przypadkiem, może to również powodować ten sam problem
Mauricio Gracia Gutierrez
Jak można znaleźć oldFileCase, którego oczekuje git?
diemo
24

Jeśli plik jest wykluczony przez .gitignorei mimo to chcesz go dodać, możesz wymusić to za pomocą:

git add -f path/to/file.ext
mobiusloopy
źródło
Wielkie dzięki! To naprawdę mi pomogło. Z jakiegoś powodu mój plik został wykluczony (nie było go .gitignorewięc nie wiem dlaczego!) I to rozwiązało mój problem!
benmaq
13

Dziwne, ale całą noc walczyłem z gitem, aby dodać plik. Okazuje się, że został już dodany. Git nie odbierał moich zmian, ponieważ zmiany nie były zapisywane, ponieważ plik był niedostępny dla mojego konta, a moje IDE nie zgłaszało tego przez SSH.

Krótko mówiąc, sprawdź, czy nie masz go już dodanego do repozytorium.

Ćwiek
źródło
1
... myśląc o tym, gitmógłbym dodać wiadomość, jeśli którakolwiek z podanych ścieżek jest już w całości w repozytorium ... zaoszczędziłoby to co najmniej 13 osobom kilka minut.
jjmontes
13

Dokładnie sprawdź .gitignoreplik, aby upewnić się, że jest on widoczny dla Gita. Istnieje również plik, .git/info/excludektóry „wyklucza” pliki / katalogi z projektu, tak jak .gitignorezrobiłby to plik.

wróbel
źródło
Dodałbym również, aby dokładnie sprawdzić, czy pliki nie są w jakiś sposób „już dodane”, czy nie ...
rogerdpack
9

Właśnie miałem ten problem, a problem polegał na tym, że byłem w katalogu, a nie na najwyższym poziomie. Kiedy przeszedłem na najwyższy poziom, zadziałało.

gaoagong
źródło
2
Jestem pewien, że mogłem użyć git add ..lub czegokolwiek wymaganego, aby osiągnąć poziom, na którym istniały moje zmiany, i to też by zadziałało. To tylko problem „gotcha” (mój błąd użytkownika).
gaoagong
8

Najlepiej jest skopiować folder. Usuń oryginał. Sklonuj projekt z github, skopiuj nowe pliki do nowego sklonowanego folderu, a następnie spróbuj ponownie.

Chris G.
źródło
To zadziałało dla mnie przy użyciu git na CygWin i otrzymywaniu niektórych komunikatów o błędach uprawnień. Nie musiałem nawet klonować i kopiować zmienionych plików, po prostu zduplikowałem katalog tak, jak był. Myślę, że zmuszenie systemu Windows do ponownego zapisania wszystkiego oznacza, że ​​naprawia problemy z uprawnieniami.
RoG
5

Miałem ten problem z pierwszym programem w folderze. Zrobiłem „git add”, a następnie „git commit”. „Stan git” zwrócił opisany błąd, tj. „nic do zatwierdzenia, katalog roboczy czysty”

Skończyło się na usunięciu pliku .git z folderu programu. Następnie wykonałem nowy git init, git add i git commit i zadziałało.

codelearner336
źródło
Dla mnie było odwrotnie. Byłem w konflikcie scalania (rebase) i musiałem przejść cddo folderu do git addpliku.
LosManos
3

A co ze standardową procedurą:

git add folder
git commit

Spowoduje to dodanie folderu i wszystkich jego plików za pomocą jednego polecenia.
Uwaga, git nie jest w stanie przechowywać pustych folderów.

Jeśli zatwierdzenie nie zadziałało, pierwszym miejscem, które powinieneś sprawdzić, jest prawdopodobnie .gitignore.

Andrejs Cainikovs
źródło
6
Uwaga, git nie jest w stanie przechowywać pustych folderów. TY!
Blundell
3

Tutaj możesz znaleźć odpowiedź na ten sam problem:

w zasadzie w tym przypadku problemem było ignorowanie global_git

Max_Power89
źródło
2

W moim przypadku problemem była włączona opcja SafeCrLf. Jestem na oknach z żółwiem. Po wyłączeniu opcji dodawanie plików nie było już problemem.

kode
źródło
2

Innym problemem mogą być uprawnienia do plików. Spróbuj wystawić: chmod 755 file1

MAQ
źródło
2

Głupie rozwiązanie ode mnie, ale pomyślałem, że to nie jest dodawanie i wysyłanie nowych plików, ponieważ github.com nie wyświetlał plików, które właśnie wysłałem. Zapomniałem, że dodane przeze mnie pliki znajdują się w innej gałęzi. Pliki były w porządku. Musiałem przełączyć się z mojej głównej gałęzi na nową gałąź na githubie, aby je zobaczyć. Straciłem na tym kilka minut :)

David Peterson
źródło
1

Nie mogę (dla mnie) dodać pierwszego pliku do pustego repozytorium sklonowanego z GitHub . Musisz kliknąć link README, który GitHub sugeruje utworzyć. Po utworzeniu pierwszego pliku online możesz normalnie pracować z git.

Przydarzyło mi się to 17 listopada 2016 roku.

Jarekczek
źródło
1

Wciąż jestem początkującym w git i to był tylko głupi błąd, który popełniłem, długa historia w jednym zdaniu. Nie byłem w podfolderze, jak zgłosił @gaoagong, ale na odwrót, w folderze nadrzędnym. Co dziwne, nie wpadłem na pomysł z tej odpowiedzi, zamiast tego pomysł pojawił się podczas testowania git add --all, zobacz długą historię poniżej.

Przykład w szczegółach. Rzeczywiste repo:

wprowadź opis obrazu tutaj

Folder nadrzędny, który omyłkowo otworzyłem na poziomie nadrzędnym (w moim przypadku vscode_git):

wprowadź opis obrazu tutaj

Sklonowałem repozytorium, ale nad tym repozytorium miałem folder nadrzędny, który zamiast tego otworzyłem, a następnie próbowałem dodać plik repozytorium podfolderu git add 'd:\Stack Overflow\vscode_git\vscode-java\.github\ISSUE_TEMPLATE.md', co po prostu nic nie zrobiło, bez komunikatu ostrzegawczego, a git statusnastępnie powiedziałem:

nic nie zostało dodane do zatwierdzenia, ale obecne są nieśledzone pliki (użyj „git add” do śledzenia)

wprowadź opis obrazu tutaj

Bieganie git add --alldało mi żółte notatki:

ostrzeżenie: dodanie osadzonego repozytorium git: vscode-java osadzone repozytorium i nie będzie wiedział, jak je zdobyć.

wskazówka: Jeśli chciałeś dodać podmoduł, użyj: git submodule add vscode-java

wskazówka: Jeśli dodałeś tę ścieżkę przez pomyłkę, możesz usunąć ją z indeksu za pomocą git rm --cached vscode-java

Aby uzyskać więcej informacji, zobacz „moduł podrzędny pomocy git”

wprowadź opis obrazu tutaj

Aby to naprawić, przywróciłem git add --allz git rm --cached -r -f -- "d:\Stack Overflow\vscode_git\vscode-java" rm 'vscode-java':

wprowadź opis obrazu tutaj

Następnie, po prostu otwierając właściwy folder repozytorium,

wprowadź opis obrazu tutaj

git znowu działał zgodnie z oczekiwaniami. Oczywiście folder „.git” folderu nadrzędnego można wtedy usunąć:

wprowadź opis obrazu tutaj

pytanie do42
źródło
1

Możesz usunąć rekurencyjnie repozytorium zainicjowane przez git $cd repo added $git rm -rf git

Możesz utworzyć oddzielną gałąź i połączyć moduły podrzędne z gałęzią główną Dokumentacja dotycząca modułów podrzędnych jest naprawdę przydatna Dokumentacja [https://git-scm.com/book/en/v2/Git-Tools-Submodules]

Zobacz także niektóre rozwiązania w [/programming/36236484/maintaining-a-git-repo-inside-another-git-repo]

Sumi
źródło
0

Rozejrzałem się przez chwilę i okazało się, że zablokowałem port SSH, co spowodowało, że polecenie git add przestało działać. Skończyło się na zmianie pochodzenia za pomocą https za pomocą następującego polecenia: git remote set-url origin [url-to-git-repo]

cylinder 9
źródło
0

Wiem, że to naprawdę stare pytanie, ale wiem, że może się to zdarzyć również komuś, okazuje się, że pracowałem z plikiem o nazwie AUX.JS i ta nazwa pliku jest zarezerwowana dla systemu Windows, spowodowało to następujący błąd

fatal: nie można stat „src / hoc / Aux.js”: nie ma takiego pliku lub katalogu

więc możesz usunąć plik lub zmienić jego nazwę, wtedy zadziała.

Końcowy wniosek, oprócz wszystkich innych poprawnych odpowiedzi, jeśli pracujesz na komputerze z systemem Windows, szukaj danych wyjściowych polecenia „git add”, może ono również dostarczyć dodatkowych informacji.

Wiston Coronell
źródło
Dzieje się tak również w systemie Windows, użyłem git bash w tym systemie operacyjnym, aby normalnie utworzyć plik Aux.js
Alex
0

Miałem ten sam problem z repozytorium, które sklonowałem z SiteGround Git na mój komputer Mac. Świeżo sklonowane repozytorium zawierało listę zmienionych plikówgit status wymagały dodania do zatwierdzenia, ale próba dodania lub wypisania któregokolwiek z nich w ogóle nic nie zrobiła.

Z jakiegoś powodu nastąpiły zmiany wielkości liter w nazwach plików (np. .Jpg -> .JPG). Rozwiązaniem było po prostu git mvnazwa pliku, której system operacyjny używał do nazwy używanej przez git, np .:

git mv File_That_Wont_Add.txt File_THAT_WONT_Add.txt
Douglas Krugman
źródło
0

Niedawno wystąpił ten problem na moim komputerze z systemem Windows 7. Używam interfejsu okna poleceń git. Rozwiązaniem było bardzo ostrożne przy rozróżnianiu wielkości liter w nazwach plików i katalogów podczas wykonywania polecenia git add. Chociaż git nie narzekał, gdy przypadek nie zgadzał się dokładnie z wielkością liter w systemie plików systemu Windows i nazwach katalogów, to również nie dodawał plików. Nie byłoby nic do popełnienia. Po wpisaniu nazw plików z dokładnie poprawną wielkością liter zostaną one dodane i wymienione pod zmianami, które mają zostać zatwierdzone zgodnie z zamierzeniami.

jsim
źródło
0

Miałem ten problem w programie Visual Studio, co zadziałało dla mnie: 1 - Kliknij prawym przyciskiem myszy dodany plik, który nie jest rozpoznawany przez git. 2- Wybierz „Dodaj wykluczony plik do kontroli źródła”

AlexGH
źródło
0

Miałem ten sam problem i to dlatego, że był program używający jakiegoś pliku, a git zgłasza błąd w tym przypadku, gdy Visual Studio zablokowało ten plik.

Mejía Pérez Néstor
źródło
0

Wystąpił problem polegający na tym, że pliki z jednego folderu nie zostały dodane do kontroli źródła Github. Aby rozwiązać ten problem, usunąłem folder .git, który został utworzony w tym folderze.

Vaibhav Ghorpade
źródło
0

Miałem podobny problem.

Problem polegał na tym, że w systemie Windows w indeksie plik został dodany w przypadku innym niż ten, który znajdował się w obszarze niestacjonarnym. Na przykład w indeksie plik miał nazwę, xx.txta w obszarze nieokreślonym plik miał nazwę Xx.txt.

Usunięto plik z nieprawidłowym przypadkiem z indeksu ( xx.txt). Następnie udało mi się dodać plik z poprawną wielkością liter ( Xx.txt).

ghigad
źródło
0

Problem git nie dodał zmienionego pliku. Używając git bash, zmieniłem folder, oddzielając nazwę folderu podwójnym cudzysłowem. ls wyświetlał zawartość folderu poprawnie, ale git nie dodawał zmienionych plików.

Rozwiązanie Użyłem pojedynczego cudzysłowu do oddzielenia nazwy folderu.

np. CD „Nazwa folderu” stan git nic do zatwierdzenia, drzewo robocze czyste CD .. ls „Nazwa folderu” CD „Nazwa folderu” stan git zmodyfikowany: Zmodyfikowana nazwa pliku.bat

Devlin
źródło
0

Wypróbowałem wszystkie powyższe, ale nic nie działało. Później jako administrator uruchomiłem wiersz poleceń wiersz i powtórzyłem wszystkie etapy, tj. Przemieszczanie -> zatwierdzanie -> zdalne dodawanie -> wysyłanie. Działało jak magia. Zmiany zostały odzwierciedlone w wybranym zdalnym repozytorium.

Mam nadzieję, że to pomoże :) Zachowaj spokój i programuj dalej.

PS Jestem nową pszczołą i staram się uczyć na błędzie.

skalisty
źródło
0

Podobnie stało się ze mną, kiedy zmieniłem nazwę pliku między Uppercase/Lowercase. Tak więc zmiana nazwy pliku tymczasowego może rozwiązać problem.

T.Todua
źródło
0

W takich przypadkach sprawdź reguły w globalnym pliku .gitignore i upewnij się, że twój folder nie pasuje do nich.

Priyanka Singh
źródło
0

Oto jak zabrałem się do pracy:

Zacząłem od

git init 

wewnątrz katalogu ze wszystkimi plikami / folderami, które chciałem dołączyć.

Pobiegłem

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

NASTĘPNIE

Zrobiłem inny katalog poza źródłem, przeniosłem się do tego katalogu, a następnie sklonowałem istniejące repozytorium git za pomocą pliku http: //../../.git, jak określono na stronie w github.

Po sklonowaniu źródła (które zawierało tylko plik readme.md) skopiowałem wszystkie pliki ze starego katalogu do nowego z

cp -rf ../../* .

Następnie dodałem ponownie, a następnie zatwierdziłem i odrzuciłem te zmiany.

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

Nie pytaj mnie dlaczego, ale tym razem zostały one przesłane na stronę github i pojawiły się jako pliki, do których masz dostęp w archiwum .zip.

daemondave
źródło