Mam repozytorium wywołane myrepo
na zdalnym beanstalk
serwerze.
Sklonowałem go na mój lokalny komputer. Utworzono dwie dodatkowe gałęzie: staging
i dev
. Zepchnął również te gałęzie na odległość.
Teraz:
local remote server
--------------------------------------------------------
master ==> Pushes to `master` ==> deployed to `prod`
staging ==> Pushes to `staging` ==> deployed to `staging`
dev ==> Pushes to `dev` ==> deployed to `dev`
Mam plik o nazwie, config.xml
który jest inny w każdej gałęzi.
Chcę zignorować ten plik tylko podczas scalania. Ale chcę, aby było to uwzględnione, gdy płacę lub zatwierdzam z / do gałęzi repo.
Chcę tego, ponieważ mamy skrypt wdrażania, który pobiera (pobiera) określoną gałąź i wdraża na odpowiednich serwerach. Więc potrzebujemy, aby config.xml
plik tej konkretnej gałęzi trafiał na określony serwer, jak wskazano powyżej, po wdrożeniu.
Chyba .gitignore
nie zadziała. Jakie są inne opcje? Zauważ, że ignorowany plik powinien być częścią wypisania i zatwierdzenia, co jest ważne. należy go ignorować tylko podczas scalania.
Dzięki!
Odpowiedzi:
Poradziłem sobie z tym problemem, używając polecenia git merge z
--no-commit
opcją, a następnie jawnie usunąłem plik pomostowy i zignorowałem zmiany w pliku. Np .: powiedz, że chcę zignorować wszelkie zmianymyfile.txt
, postępuję w następujący sposób:Możesz umieścić instrukcje 2 i 3 w pętli for, jeśli masz listę plików do pominięcia.
źródło
git reset HEAD myfile.txt
dokładnie robi? Jak to pomaga w realizacji naszego celu tutaj?Skończyło się na znalezieniu gita
attributes
. Próbuję tego. Pracuję do tej pory. Nie sprawdziłem jeszcze wszystkich scenariuszy. Ale to powinno być rozwiązanie.Scal strategie - atrybuty Git
źródło
.gitattributes
- to plik poziomu głównego repozytorium, który definiuje atrybuty podkatalogu lub podzbioru plików.Możesz określić atrybut, aby poinformować Git, aby używał różnych strategii scalania dla określonego pliku. Tutaj chcemy zachować istniejący
config.xml
dla naszej branży. Musimy ustawićmerge=ours
sięconfig.xml
w.gitattributes
pliku.merge=ours
powiedz gitowi, aby użył naszego pliku (bieżącej gałęzi), jeśli wystąpi konflikt podczas łączenia.Dodaj
.gitattributes
plik na głównym poziomie repozytoriumMożesz ustawić atrybut dla confix.xml w
.gitattributes
plikuA następnie zdefiniuj fikcyjną naszą strategię scalania z:
Jeśli scalisz gałąź
stag
formularzadev
, zamiast konfliktu scalania z plikiem config.xml, config.xml gałęzi stag zachowa tę wersję, którą pierwotnie posiadałeś.źródło
config.xml
jest całkowicie niezmienione od bazy scalania do dowolnej wersji końcówki gałęzi, Git po prostu przyjmuje zmienioną wersję, bez patrząc namerge.ours.driver
otoczenie. Więc masz rację, jeśli się o to martwisz.theirs
jest to wbudowana strategia scalania. Ale wydaje się, że można napisać<pattern> merge=foo
, a następniegit config --global merge.foo.driver true
, i to będzie działać w ten sam sposób.Możesz zacząć od użycia
git merge --no-commit
, a następnie edytować scalanie wconfig.xml
dowolny sposób, np. Przez usunięcie z poczekalni lub dowolnego innego pliku, a następnie zatwierdzenie. Podejrzewam, że chciałbyś później zautomatyzować to za pomocą haków, ale myślę, że warto byłoby przynajmniej raz przejść przez to ręcznie.źródło
git attributes
oferuje jakieś proste rozwiązanie? Nie jestem w stanie tego zrozumieć. git-scm.com/book/en/ ...Możesz użyć,
.gitignore
aby zatrzymaćconfig.xml
repozytorium, a następnie użyć haka po zatwierdzeniu, aby przesłać odpowiedniconfig.xml
plik na serwer.źródło
attributes
. Masz jakiś pomysł, jak to działa? Nie jestem w stanie tego zrozumieć. git-scm.com/book/en/ ...Przykład:
master
,develop
develop
gałęzi i chcesz go zignorować podczas scalaniaKod:
Możesz także zignorować pliki z tym samym rozszerzeniem
na przykład wszystkie pliki z
.txt
rozszerzeniem:źródło
Tutaj git-update-index - rejestruje zawartość pliku w drzewie roboczym do indeksu.
Przykład:-
źródło