Jak zatrzymać śledzenie i zignorować zmiany w pliku w Git?


1730

Sklonowałem projekt, który zawiera niektóre .csprojpliki. Nie potrzebuję / nie lubię, aby moje lokalne csprojpliki były śledzone przez Git (lub wychowywane podczas tworzenia łatki), ale najwyraźniej są one potrzebne w projekcie.

Dodałem *.csprojdo mojego LOCAL .gitignore, ale pliki są już w repozytorium.

Kiedy wpisuję status git, pokazuje moje zmiany, csprojktórych nie jestem zainteresowany śledzeniem lub przesyłaniem poprawek.

Jak usunąć „śledzenie” tych plików z mojego osobistego repozytorium (ale zachować je w źródle, aby móc z nich korzystać), aby nie widziałem zmian, kiedy wykonuję status (lub tworzę łatkę)?

Czy istnieje poprawny / kanoniczny sposób poradzenia sobie z tą sytuacją?


18
Bardzo przydatne pytanie, ale jestem ciekawy, dlaczego nie chcesz śledzić zmian w .csprojpliku, który jest bardzo ważną częścią każdego projektu. Zmiany w .csproj.userpliku lub dowolnych .Publish.XMLplikach Całkowicie rozumiem brak śledzenia, ale jestem zaintrygowany, dlaczego nie chcesz śledzić .csproj
Owen Blacker

7
Może używają innego IDE?
Jarrett

3
Jak na ironię, przyszedłem do tego wątku, ponieważ chcę usunąć pliki .suo z repozytorium, ale zachowaj je lokalnie. Dla potomności, programowanie .Net wymaga trzymania plików .csproj w repozytorium, a zmiany te powinny być zawsze śledzone, chyba że chcesz poczuć gniew innych programistów. W razie wątpliwości zapoznaj się z repozytorium plików gitignore na GitHub: github.com/github/gitignore/blob/master/VisualStudio.gitignore
longda

1
@Ciastko, pytanie, do którego linkujesz, zostało napisane 15 dni po tym? Może masz na myśli inny?
stephenmurdoch

@marflar pytania kanoniczne niekoniecznie muszą być najstarsze , tylko najlepsze . Ten, do którego

Odpowiedzi:


2128

Po prostu wywołanie git rm --cachedkażdego pliku, który chcesz usunąć z kontroli wersji, powinno być w porządku. Tak długo, jak lokalne wzorce ignorowania nie są poprawne, nie zobaczysz tych plików na wyjściu statusu git.

Zauważ, że to rozwiązanie usuwa pliki z repozytorium, więc wszyscy programiści musieliby utrzymywać własne lokalne (niekontrolowane) kopie pliku

Aby zapobiec wykrywaniu zmian w tych plikach przez git, powinieneś również użyć tego polecenia:

git update-index --assume-unchanged [path]

Co prawdopodobnie chcesz zrobić: (od dołu odpowiedź @Ryan Taylor )

  1. Ma to na celu poinformowanie gita, że ​​chcesz mieć własną niezależną wersję pliku lub folderu. Na przykład nie chcesz zastępować (lub usuwać) plików konfiguracyjnych produkcji / przemieszczania.

git update-index --skip-worktree <path-name>

Pełna odpowiedź znajduje się tutaj: http://source.kohlerville.com/2009/02/untrack-files-in-git/


187
„git rm --cached <plik>” usuwa <plik> z kontroli wersji, pozostawiając go w działającym repozytorium. Czy tego chcesz ...
Jakub Narębski

51
Ale kiedy inni wyciągną repozytorium, czy ich własny plik * .csproj zostanie usunięty? Ponieważ jeśli chcemy, aby plik nie był śledzony, ale nie został usunięty.
FMaz008

23
Jeśli próbujesz usunąć WSZYSTKIE pliki w katalogu, połącz je z plikami git ls: git ls-files | xargs git rm --cached- spowoduje to usunięcie wszystkiego z indeksu git w danym katalogu bez usuwania rzeczywistych plików.
Marco

129
git rm --cached -r <dir>działa rekurencyjnie na folder i wszystkie pliki w nim zawarte.
Chris K

41
Spowoduje to zatrzymanie śledzenia pliku, zachowanie go lokalnie, ale spowoduje, że zostanie on usunięty dla każdego, kto pobierze
Edward Newell

249

Jeśli to zrobisz git update-index --assume-unchanged file.csproj, git nie sprawdzi automatycznie pliku.csproj pod kątem zmian: spowoduje to, że nie pojawią się one w stanie git przy każdej zmianie. Możesz w ten sposób oznaczyć wszystkie swoje pliki .csproj - chociaż będziesz musiał ręcznie oznaczyć wszystkie nowe, które wyśle ​​do ciebie repozytorium. (Jeśli masz je w swoim .gitignorelub .git/info/exclude, to te, które utworzysz, zostaną zignorowane)

Nie jestem do końca pewien, czym są pliki .csproj ... jeśli są czymś podobnym do konfiguracji IDE (podobnej do plików .eclipse i .classpath w Eclipse), to sugeruję, że po prostu nigdy nie powinny być kontrolowane przez źródło wszystko. Z drugiej strony, jeśli są częścią systemu kompilacji (jak Makefiles), to oczywiście powinny --- i przydatny byłby sposób na pobranie opcjonalnych zmian lokalnych (np. Z pliku local.csproj a la config.mk) : podziel nagromadzenie na części globalne i lokalne przesłonięcia.


8
csproj to plik projektu C #, który śledzi, które pliki są zawarte w twoim projekcie i kilku innych konfiguracjach, MUSI być kontrolowany przez źródło, aby projekt mógł działać
SparK

4
To jedyna słuszna odpowiedź tutaj! Korzystam z odpowiedzi @araqnids od lat i działa dokładnie tak, jak poprosiłem o rozwiązanie tego problemu.
NHDaly

Jakie jest znaczenie przedrostka „plik” w argumencie polecenia? Dlaczego to nie jest po prostu .csproj?
GreenAsJade

1
Czy jest jakiś sposób na wykrycie, że zostało to zrobione dla pliku lub dla jakich plików zostało to zrobione w repozytorium? Trochę denerwuję się zapominaniem, że to zrobiłem, a potem zastanawiam się, dlaczego, do cholery, ten plik nie jest aktualizowany później!
GreenAsJade

4
@GreenAsJade: git ls-files -vpokaże pliki, które są zakładane w niezmienionej postaci, ze wskaźnikiem małych liter (np. hZamiast zwykłych Hplików buforowanych).
Amadan

237

Istnieją 3 opcje, prawdopodobnie chcesz # 3

1. Pozwoli to zachować plik lokalny dla Ciebie, ale usunie go dla każdego innego, gdy go ściągną.

git rm --cached <file-name> lub git rm -r --cached <folder-name>

2. Ma to na celu optymalizację, podobnie jak folder z dużą liczbą plików, np. Zestawy SDK, które prawdopodobnie nigdy się nie zmienią. Mówi gitowi, aby przestał sprawdzać ten ogromny folder za każdym razem pod kątem zmian, lokalnie, ponieważ nie będzie go miał. assume-unchangedIndeksu zostaną zresetowane i plik (i) nadpisane jeśli istnieją upstream zmiany do pliku / folderu (można wyciągnąć).

git update-index --assume-unchanged <path-name>

3. Ma to na celu poinformowanie gita, że ​​chcesz mieć własną niezależną wersję pliku lub folderu. Na przykład nie chcesz zastępować (lub usuwać) plików konfiguracyjnych produkcji / przemieszczania.

git update-index --skip-worktree <path-name>

Ważne jest, aby wiedzieć, że git update-index nie będzie się ono rozprzestrzeniać za pomocą git i każdy użytkownik będzie musiał uruchomić go niezależnie.


8
Ta odpowiedź jest najbardziej kompletna - oferuje różne rozwiązania z ich konsekwencjami. W konkretnym przypadku, z którym pracuję, hasło jest osadzone w pliku konfiguracyjnym. Chcę propagować plik szablonu, a następnie dodać hasło do mojej kopii. Kopię z hasłem należy zignorować i nie nadpisywać.
bmacnaughton,

1
Jak mogę sprawdzić w moim lokalnym, które pliki dotyczą „zakładaj niezmienione” lub „pomiń”?
Supawat Pusavanno,

3
@SupawatPusavanno, aby zobaczyć, które pliki wcześniej wybrałeś do zakładania w niezmienionym lub pominiętym drzewie roboczym, spójrz na tę odpowiedź stackoverflow.com/questions/42363881/... - używa grepigit ls-files
Ryan Taylor

1
Bardzo dobra odpowiedź. Ale git zgłasza błąd, gdy próbuję przejść do innej gałęzi: błąd: „Twoje lokalne zmiany w następujących plikach zostałyby nadpisane przez kasę .....”, a rozwiązaniem jest ukrywanie zmian przed przełączeniem i rozpakowywanie, gdy wracasz do oddziału.
PhantomReference,

@RyanTaylor: Próbowałem najpierw założyć, że niezmienione (nie działało) i pomiń polecenie worktree (nie działało), kiedy sprawdzam ze statusem git, pliki się nie pokazują, oznacza to, że polecenie działało. Ale kiedy ponownie it gives me error that your local changes would be overwrittenściągam kod z repozytorium git origin w tych 2 plikach, to znaczy, że nie jest to śledzenie, prawda?
NeverGiveUp161

152

Jest to proces dwuetapowy:

  1. Usuń śledzenie pliku / folderu - ale zachowaj je na dysku - używając

    git rm --cached 
    

    Teraz nie pojawiają się jako „zmienione”, ale nadal pokazują się jako

        untracked files in  git status -u  
    
  2. Dodaj je do .gitignore


56
Nie, spowoduje to usunięcie pliku ze śledzenia, zachowanie go lokalnie, ale spowoduje, że zostanie on usunięty dla każdego, kto pobierze .
Edward Newell

1
W moim przypadku przypadkowo dodałem folder, którego nie chciałem śledzić, więc tego właśnie potrzebowałem.
Sonny

4
Tak, to rzeczywiście zła odpowiedź na zadane pytanie - ale prawdopodobnie jest to prawidłowa odpowiedź dla większości osób, które znajdują to pytanie w wynikach wyszukiwania (takich jak ja).
Andrew Spencer,

95

Przyjęta odpowiedź wciąż nie działała dla mnie

użyłem

git rm -r --cached.

git add.

git commit -m "naprawianie .gitignore"

Znalazłem odpowiedź stąd


Ten link jest bardzo przydatny, szczególnie do rekurencyjnego usuwania wszystkich plików w
.gitignore

9
Wróciłem tu 3 razy, mam nadzieję, że uda mi się zapisać w pamięci przed następnym razem!
Harry Bosh,

Komentarz @Edwarda Newella, jak w powyższej odpowiedzi, również tutaj ma zastosowanie: „spowoduje to usunięcie pliku ze śledzenia, zachowanie go lokalnie, ale spowoduje, że zostanie on usunięty dla każdego, kto pobierze ”.
ToJo

46

Zapomniałeś swojego .gitignore?

Jeśli masz cały projekt lokalnie, ale zapomniałeś go dodać, zignoruj ​​i śledzisz teraz niektóre niepotrzebne pliki, użyj tego polecenia, aby usunąć wszystko

git rm --cached -r .

upewnij się, że jesteś u podstaw projektu.

Następnie możesz zrobić to, co zwykle

Dodaj

git add .

Popełnić

git commit -m 'removed all and added with git ignore'

Pchać

git push origin master

Wniosek

Mam nadzieję, że to pomaga ludziom, którzy muszą wprowadzić zmiany w swoim .gitignorelub zapomnieli o tym wszystkim razem.

  • Usuwa całą pamięć podręczną
  • Patrzy na twój .gitignore
  • Dodaje pliki, które chcesz śledzić
  • Przesuwa do twojego repozytorium

4
Kiedy mówisz o usuwaniu lub dodawaniu, zapominasz powiedzieć, kiedy i gdzie. Usuwasz z listy utworów? Z repozytorium? Z lokalnej przestrzeni projektu? Usuwasz przy wyciągnięciu? Przy zatwierdzeniu? W pchnięciu? Niestety, wszyscy autorzy mają ten sam problem.
Gangnus,

3
@Gangnus Nie sądzę, aby ktokolwiek „wyjaśnił” punkt, który próbujesz zrobić, ponieważ jest całkowicie oczywiste, że plik nie jest tak naprawdę usuwany z dysku lub repozytorium. Ta odpowiedź określa chronologiczny porządek poleceń. Nie jest to tajemnicze ani źle wyjaśnione, jak sugerowałby twój komentarz.
Anthony

Komentarz @Edwarda Newella, jak w powyższej odpowiedzi, również tutaj ma zastosowanie: „spowoduje to usunięcie pliku ze śledzenia, zachowanie go lokalnie, ale spowoduje, że zostanie on usunięty dla każdego, kto pobierze ”.
ToJo

26

Jak wskazano w innych odpowiedziach, wybrana odpowiedź jest błędna.

Odpowiedź na inne pytanie sugeruje, że może to być Skip-worktree które byłyby wymagane.

git update-index --skip-worktree <file>

2
Nie, niezupełnie: --skip-worktreesłuży do przechowywania pliku w repozytorium, ale przestaje śledzić jego zmiany . Jako odpowiedź mówi: --skip-worktree jest przydatna, gdy nie pouczać git dotknąć plik specyficzny kiedykolwiek ponieważ programiści powinni to zmienić
Erdal G.

4
@ErdalG. Dokładnie. Zgodnie z pytaniem, chcą zignorować wszelkie zmiany w pliku, ale zachować plik w repozytorium
the_new_mr

Zgadzam się z @the_new_mr --assume-unchangedi --skip-worktreemają podobny efekt, ale ich cele są zupełnie inne. Pierwszy służy do przyspieszenia działania gita przez oszukanie gita, aby nie sprawdzał poszczególnych plików , a drugi do ignorowania przyszłych zmian w poszczególnych plikach , które są odpowiednie dla środowiska wykonawczego, ale niezbędne pliki.
Victor Wong

22

Aby zaoszczędzić trochę czasu, reguły dodane do .gitignore można wykorzystać do usunięcia wielu plików / folderów, tj

git rm --cached app/**/*.xml

lub

git rm --cached -r app/widgets/yourfolder/

itp


To bardzo dobre rozwiązanie, ponieważ przy każdej okazji chcesz naprawić gitignore krok po kroku
cutiko

15

Aby zapobiec monitorowaniu pliku przez git

git update-index --assume-unchanged [file-path]

Aby przywrócić, użyj go ponownie

git update-index --no-assume-unchanged [file-path]

Repozytorium do odniesienia w podobnych przypadkach użycia https://github.com/awslabs/git-secrets


1
Dzięki cofnięciu wskazówka uratowała życie, dzięki!
Hamman Samuel

9

Wiele osób zaleca używanie git update-index --assume-unchanged. Rzeczywiście może to być dobre rozwiązanie, ale tylko w krótkim okresie.

Co prawdopodobnie chcesz zrobić to w ten sposób: git update-index --skip-worktree.

(Trzecią opcją, której prawdopodobnie nie chcesz, jest git rm --cached:. Zachowa twój plik lokalny, ale zostanie oznaczony jako usunięty ze zdalnego repozytorium.)

Różnica między dwiema pierwszymi opcjami?

  • assume-unchangedma tymczasowo pozwolić ci ukryć modyfikacje przed plikiem. Jeśli chcesz ukryć modyfikacje dokonane w pliku, zmodyfikować plik, a następnie wyewidencjonować inną gałąź, będziesz musiał użyć, no-assume-unchangeda następnie prawdopodobnie ukrytych modyfikacji zrobionych.
  • skip-worktree podąży za tobą niezależnie od gałęzi, którą zamawiasz, wraz ze swoimi modyfikacjami!

Przypadek użycia assume-unchanged

Zakłada, że ​​ten plik nie powinien być modyfikowany i daje czystsze wyjście podczas wykonywania git status. Ale podczas sprawdzania w innym oddziale musisz zresetować flagę i zatwierdzić lub ukryć zmiany przedtem. Jeśli wyciągniesz z włączoną tą opcją, będziesz musiał rozwiązać konflikty i git nie będzie automatycznie scalał. W rzeczywistości ukrywa tylko modyfikacje ( git statusnie pokazuje oznaczonych plików).

Lubię go używać, gdy chcę zatrzymać na chwilę śledzenie zmian + zatwierdzić kilka plików ( git commit -a) związanych z tą samą modyfikacją.

Przypadek użycia skip-worktree

Masz klasę konfiguracji zawierającą parametry (np. W tym hasła), które Twoi znajomi muszą zmienić zgodnie z ich konfiguracją.

  • 1: Utwórz pierwszą wersję tej klasy, wypełnij pola, które możesz wypełnić, a inne pozostaw puste / puste.
  • 2: Zatwierdź i wypchnij go na zdalny serwer.
  • 3: git update-index --skip-worktree MySetupClass.java
  • 4: Zaktualizuj klasę konfiguracji o własne parametry.
  • 5: Wróć do pracy nad inną funkcjonalnością.

Modyfikacje, które wprowadzisz, podążą za tobą niezależnie od branży. Ostrzeżenie: jeśli Twoi znajomi również chcą zmodyfikować tę klasę, muszą mieć taką samą konfigurację, w przeciwnym razie ich modyfikacje zostaną wypchnięte do zdalnego repozytorium. Podczas pobierania zdalna wersja pliku powinna zastąpić twoją.

PS: wykonaj jedną lub drugą, ale nie obie, ponieważ będziesz mieć niepożądane skutki uboczne. Jeśli chcesz wypróbować inną flagę, najpierw wyłącz tę drugą.


7

Aby powiedzieć Gitowi, aby nie śledził zmian w lokalnym pliku / folderze (co oznacza, że ​​status git nie wykryje zmian w nim):

git update-index --skip-worktree path/to/file

Aby powiedzieć Gitowi, aby ponownie śledził zmiany w lokalnej wersji (abyś mógł zatwierdzić zmiany):

git update-index --no-skip-worktree path/to/file

1

odpowiedź w jednej linii git update-index --assume-unchanged [path]

Użyj tego, gdy masz plik, który znajduje się w centralnym repozytorium, a także w repozytorium lokalnym. Musisz wprowadzić zmiany w tym pliku, ale nie można go przemieszczać / zatwierdzać w centralnym repozytorium. Ten plik nie powinien być dodawany .gitignore. ponieważ nowe zmiany w pliku, jeśli zostaną wprowadzone przez administratorów systemu, starsi programiści muszą zostać rozdzieleni między wszystkie repozytoria lokalne.

Najlepszy przykład: plik konfiguracyjny dla połączeń DB . W centralnym repozytorium będziesz mieć całą nazwę użytkownika, hasło, host, port z wartościami produkcyjnego serwera DB. Ale w lokalnym deweloperze powinieneś używać tylko lokalnego lub dowolnego innego deweloperskiego serwera DB (skonfigurowanego przez zespół). W takim przypadku chcesz wprowadzić zmiany w pliku konfiguracyjnym, ale nie powinieneś być przypisany do centralnego repozytorium.

Najlepsza


0

Zakładam, że pytasz, jak usunąć WSZYSTKIE pliki w określonym folderze lub folderze bin, zamiast wybierać poszczególne pliki osobno.

Możesz użyć tego polecenia:

git rm -r -f /<floder-name>\*

Upewnij się, że znajdujesz się w katalogu nadrzędnym tego katalogu.
To polecenie rekurencyjnie „usunie” wszystkie pliki znajdujące się w folderach bin / lub build /. Przez słowo „usuń” rozumiem, że git będzie udawał, że te pliki są „usuwane”, a te pliki nie będą śledzone. Git naprawdę zaznacza te pliki w trybie usuwania.

Upewnij się, że masz .gitignore gotowy na nadchodzące zmiany.
Dokumentacja: git rm


0

Problem może być spowodowany kolejnością działania. Jeśli najpierw zmodyfikowałeś .gitignore, a następnie git rm --cached xxx, być może będziesz musiał napotkać ten problem.

Prawidłowe rozwiązanie :

  1. git rm --cached xxx
  2. zmodyfikowano .gitignore

Zamów niezmienny!

.Gitignore przeładowuje po modyfikacji!


0

Zakładam, że próbujesz usunąć pojedynczy plik z narzędzia git tacking. do tego polecam poniżej polecenia.

git update-index --assume-niezmieniony

Ex - git update-index --assume-unchanged .gitignore .idea / compiler.xml


0

Aby zignorować wszelkie zmiany wszystkich plików (określonego typu) w katalogu, musiałem połączyć niektóre z tych podejść, w przeciwnym razie pliki zostałyby utworzone, jeśli wcześniej nie istniały.

Poniżej „excelir” to nazwa katalogu, w którym nie chcę oglądać zmian.

Najpierw usuń wszystkie istniejące nowe pliki z pamięci podręcznej śledzenia zmian (bez usuwania z systemu plików).

git status | grep "new file:" | cut  --complement -d " " -f1-4 | grep "^excludedir" | xargs git rm --cache

Możesz zrobić to samo z modified:. renamed:jest nieco bardziej skomplikowane, ponieważ musisz spojrzeć na ->bit postu dla nowej nazwy pliku i wykonać ->bit wstępny, jak opisano deleted:poniżej.

deleted: pliki są nieco bardziej skomplikowane, ponieważ wydaje się, że nie można zaktualizować indeksu dla pliku, który nie istnieje w systemie lokalnym

echo .deletedfiles >> .gitignore
git status | grep "deleted:" | cut  --complement -d " " -f1-4 | grep "^excludedir" > .deletedfiles
cat .deletedfiles | xargs -d '\n' touch
cat .deletedfiles | xargs -d '\n' git add -f
cat .deletedfiles | xargs -d '\n' git update-index --assume-unchanged
cat .deletedfiles | xargs -d '\n' rm

Ostatnie polecenie z powyższej listy usunie pliki ponownie z systemu plików, więc możesz je pominąć.

Następnie zablokuj śledzenie zmian w tym katalogu

git ls-files excludedir/ | xargs git update-index --skip-worktree
git update index --skip-worktree excludedir/

0

W tej odpowiedzi podano podejście prawie bez gitów :

Aby zignorować niektóre pliki dla każdego lokalnego repozytorium :

  1. Utwórz plik ~/.gitignore_global, np. Przez touch ~/.gitignore_globalw swoim terminalu.
  2. Uruchom git config --global core.excludesfile ~/.gitignore_globalraz.
  3. Napisz ścieżki do pliku / katalogu, które chcesz zignorować ~/.gitignore_global. np. modules/*.Hktóry będzie zakładany w twoim katalogu roboczym, tj $WORK_DIR/modules/*.H.

Aby zignorować niektóre pliki dla jednego lokalnego repozytorium :

  1. Wykonaj powyższy trzeci krok dla pliku .git/info/excludew repozytorium, czyli zapisz ścieżki do pliku / katalogu, które chcesz zignorować .git/info/exclude. np. modules/*.Cktóry będzie zakładany w twoim katalogu roboczym, tj $WORK_DIR/modules/*.C.

0

Zastosuj .gitignore do teraźniejszości / przyszłości

Ta metoda stosuje standardowe zachowanie .gitignore i nie wymaga ręcznego określania plików, które należy zignorować .

Nie można --exclude-from=.gitignorejuż używać : / - Oto zaktualizowana metoda:

Porady ogólne: zacznij od czystego repozytorium - wszystko zostało popełnione, nic nie czeka w katalogu roboczym lub indeksie i wykonaj kopię zapasową !

#commit up-to-date .gitignore (if not already existing)
#this command must be run on each branch
git add .gitignore
git commit -m "Create .gitignore"

#apply standard git ignore behavior only to current index, not working directory (--cached)
#if this command returns nothing, ensure /.git/info/exclude AND/OR .gitignore exist
#this command must be run on each branch
git ls-files -z --ignored --exclude-standard | xargs -0 git rm --cached

#optionally add anything to the index that was previously ignored but now shouldn't be:
git add *

#commit again
#optionally use the --amend flag to merge this commit with the previous one instead of creating 2 commits.

git commit -m "re-applied modified .gitignore"

#other devs who pull after this commit is pushed will see the  newly-.gitignored files DELETED

Jeśli musisz również usunąć nowo zignorowane pliki z historii zatwierdzeń oddziału lub jeśli nie chcesz, aby nowo zignorowane pliki zostały usunięte z przyszłych operacji pobierania , zapoznaj się z tą odpowiedzią .


-1

po długim szukaniu znajdź sposób, aby to zrobić. alias polecenia git w. .gitconfigjak w projekcie Android Studio, przed kasą przywróć plik konfiguracyjny, a następnie pomiń go, po kasie użyj sedzmiany pliku konfiguracyjnego na moją konfigurację lokalną. checkoutandmodifylocalproperties = !git update-index --no-skip-worktree local.properties && git checkout local.properties && git checkout $1 && git update-index --skip-worktree local.properties && sed -i '' 's/.*sdk.dir.*/sdk.dir=\\/Users\\/run\\/Library\\/Android\\/sdk/g' local.properties && :

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.