Używam git do synchronizacji z phonegap podczas testowania w natywnej przeglądarce telefonu. Jako taki mam następujący wiersz:
var isPhoneGap = false;
Oczywiście zmieniam to podczas budowania, ale czy istnieje sposób, aby skonfigurować git tak, aby ignorował tę jedną linię, czy też muszę umieścić go w swoim własnym pliku i zignorować w ten sposób?
Używam Gitx i terminala na OSX 10.6.
Odpowiedzi:
Jeśli twój plik jest określonego typu, możesz zadeklarować sterownik filtru zawartości , który możesz zadeklarować w
.gitattributes
pliku (jak przedstawiono w sekcji „Rozszerzanie słów kluczowych” w „ Atrybuty Git ”):(jeśli chcesz, możesz nawet ustawić ten filtr dla określonego pliku )
Wprowadzić w życie:
yourFilterName.smudge
(uruchomionegit checkout
) iyourFilterName.clean
(uruchomionegit add
)Twój plik wyglądałby na niezmieniony w dniu
git status
, ale jego wyewidencjonowana wersja miałaby odpowiednią wartość dlaisPhoneGap
.źródło
git diff or
ustawić status gita, zignoruj jednak filtry? Więc nadal widzę, co się zmieniło? Mój przypadek użycia dotyczy dzienników debugowania ... które ostatecznie chcę usunąć ... @jthill @VonCsh ".git/helper.sh"
upewniając się, że przekazałem wszystkie parametry do seda"$@"
(zakładam, że przekazana jest tylko ścieżka pliku ).Możesz użyć
ignorować zmiany jednego pliku, którego nie chcesz śledzić. Używam tego rozwiązania, gdy potrzebuję mieć plik w repozytorium, ale ten plik ma pewne części, które się zmieniają, że nie zawsze potrzebuję śledzenia.
Gdy plik zawiera ważne zmiany, musisz to zrobić:
Zobacz także Git doc update-index dla
--[no-]assume-unchanged
parametru.źródło
--skip-worktree
jest to lepsza opcja do większości zastosowań. stackoverflow.com/a/39583010/4233593git commit -a
, że niezmieniony nie należy nadużywać jako mechanizmu ignorowania. Jest to „Wiem, że moje działania systemu plików są powolne. Ja obiecuję Git, że nie będę zmieniać te ścieżki czyniąc je tym kawałku ... Zwłaszcza, że to nie obietnica, że przez Git Git będzie zawsze brać pod uwagę te ścieżki są unmodified- jeśli Git może określić ścieżkę, która jest oznaczona jako niezmieniona, zmieniła się bez ponoszenia dodatkowego kosztu lstat (2), zastrzega sobie prawo do zgłoszenia, że ścieżka została zmodyfikowana (… może zatwierdzić tę zmianę). ”Gitx powinien pozwolić ci na zatwierdzenie lub zignorowanie poszczególnych linii (możesz to już wiedzieć), ale musiałbyś to robić za każdym razem, gdy zatwierdzasz. Myślę, że byłoby lepiej mieć plik konfiguracyjny dla każdego celu wdrożenia (możesz je wersjonować) i jakiś parametr wykonawczy dla tego, jak uruchamiasz serwer (jak
./myserver --config=whatever.js
).źródło
Kontynuując https://stackoverflow.com/a/20574486/4935114 , @Mike zaproponował utworzenie
pre-commit
haka, który będziegrep
w plikach pomostowych dla linii, które można zignorować. Haczyk sprawdza, czy te linie zostały ustawione. Jeśli tak, jest toecho
ostrzeżenie iexit
zawiera kod,1
więc proces zatwierdzania nie będzie kontynuowany.Zainspirowany odpowiedzią @ Mike'a , znalazłem być może używam ulepszonej wersji jego haka, który automatycznie
reset
(z-p
flagą) łączy się z określoną linią, którą chcemy zignorować.Nie jestem pewien, czy ten punkt zaczepienia zadziała w sytuacji, gdy masz wiele plików z tą linią do zignorowania, ale ten
pre-commit
punkt zaczepienia szuka zmiany w tym wierszu w określonym plikubuildVars.java
. Skrypt przechwytujący wyglądał tak, kiedy testowałem go na moim komputerze.Wyjaśnienie
To, co zrobiłem, to powtórzenie sekwencji kontrolnych, które wyszukują wyrażenie regularne
isPhoneGap
podczasreset
procesu interaktywnego . W ten sposób emulując użytkownika, który naciska,/
aby wyszukaćisPhoneGap
, naciska,y
gdy pyta, czy chce odrzucić tę poprawkę, a na koniec naciska,q
aby wyjść z aplikacji interaktywnejreset
.Interaktywny proces odwróconej łatki jest udokumentowany tutaj: https://git-scm.com/docs/git-add#git-add-patch
UWAGA: Powyższy skrypt przy założeniu, że zmienną
interactive.singleKey
jestfalse
. Jeśli skonfigurowałeś swojetrue
, usuń je$'\n'
zecho
polecenia zaraz po ostrzeżeniu.źródło
Oto jak możesz to zrobić za pomocą filtrów git :
LUB
*.rb filter=gitignore
, tj. uruchom filtr o nazwiegitignore
na wszystkich*.rb
plikachgitignore
filtr wgitconfig
:$ git config --global filter.gitignore.clean "sed '/#gitignore$/'d"
, tj. usuń te wiersze$ git config --global filter.gitignore.smudge cat
czyli nic nie rób podczas ściągania pliku z repozytoriumUwagi:
Oczywiście dotyczy to plików ruby, stosowanych, gdy linia kończy się na
#gitignore
, stosowanych globalnie w~/.gitconfig
. Zmodyfikuj to, jak potrzebujesz do swoich celów.Ostrzeżenie!!
To sprawia, że plik roboczy różni się od repozytorium (oczywiście). Każde wymeldowanie lub zmiana bazy będzie oznaczać, że te linie zostaną utracone! Ta sztuczka może wydawać się bezużyteczna, ponieważ te wiersze są wielokrotnie gubione podczas sprawdzania, ponownego bazowania lub ściągania, ale mam określony przypadek użycia, aby z niego skorzystać.
Tylko wtedy,
git stash save "proj1-debug"
gdy filtr jest nieaktywny (po prostu tymczasowo go wyłącz,gitconfig
czy coś). W ten sposób mój kod debugowania może być zawszegit stash apply
dołączony do mojego kodu w dowolnym momencie bez obawy, że te wiersze zostaną przypadkowo zatwierdzone.Mam pomysł na rozwiązanie tych problemów, ale spróbuję go zrealizować innym razem.
Podziękowania dla Rudiego i jw013 za wspomnienie o filtrach git i atrybutach git.
źródło
Sterownik filtru treści nie jest dobrym rozwiązaniem. Możesz ukryć tę linię przed
git status
/ etc, ale tak naprawdę nie jest ona ignorowana. Jak tylko zmienisz wartość, twój katalog roboczy zostanie oznaczony jako brudny, nawet jeśli zmiana może nie być widoczna.Jeśli naprawdę chcesz, aby ta linia była poza kontrolą wersji, zmiana jej na argument wiersza poleceń lub umieszczenie w ignorowanym pliku dołączania lub kompilacji może być jedynym praktycznym sposobem.
źródło
Domyślam się, że może to być coś, co pojawia się w więcej niż jednej linii twojego źródła.
Myślę, że najczystszym byłoby posiadanie jakiegoś pliku .userbuildconfig, który po prostu dołączasz i wpisujesz wartości domyślne. Następnie możesz skorzystać z sugestii Carlosa, aby oznaczyć ten plik jako niezmieniony. W ten sposób inne zmiany w pliku, w których musisz sprawdzić ustawienie, nie zostaną pominięte.
Może to pozwolić na lokalne dostrojenie makr preprocesora (lub w przypadku java, coś takiego jak to https://stackoverflow.com/a/1813873/1270965 ).
źródło
Nie. Możesz ignorować tylko pojedyncze pliki (i więcej), ponieważ wiersze w .gitignore pasują do nazw plików, a nie do zawartości pliku. Wspomniałeś już o rozwiązaniu tego problemu, tj. Zignoruj pojedynczy plik zawierający zawartość, którą chcesz zignorować.
źródło