Z TortoiseSVN mogę przenieść plik na listę zmian ignorowania przy zatwierdzaniu, tak że kiedy zatwierdzam całe drzewo, zmiany w tym pliku nie są zatwierdzane.
Czy istnieje sposób na zrobienie czegoś takiego za pomocą narzędzia wiersza poleceń svn?
EDYCJA: Dziękuję za sugestie do użycia svn:ignore
, ale to nie robi tego, czego szukałem.
svn:ignore
wpływa na takie rzeczy jak svn add
& svn import
. Daje mu listę wzorców nazw plików do zignorowania.
Mam plik, który jest już pod kontrolą źródła, ale chcę wprowadzić tymczasowe zmiany w tym pliku, których nie chcę później zatwierdzać, kiedy zatwierdzam całe drzewo źródłowe. Wprowadzam wiele innych zmian i mógłbym umieścić notatkę na monitorze z informacją, żebym przywrócił ten plik przed zatwierdzeniem drzewa, ale byłoby miło, gdyby svn mógł automatycznie pominąć ten plik.
źródło
Odpowiedzi:
Subversion nie ma wbudowanej funkcji „nie zatwierdzaj” / „ignoruj przy zatwierdzaniu” od lutego 2016 r. / Wersja 1.9. Ta odpowiedź jest nieidealnym obejściem wiersza polecenia
Jak stwierdza OP, TortoiseSVN ma wbudowaną listę zmian „ignoruj przy zatwierdzeniu”, która jest automatycznie wykluczana z zatwierdzeń. Klient wiersza poleceń nie ma tego, więc musisz użyć wielu list zmian, aby osiągnąć to samo zachowanie (z zastrzeżeniami) :
Ponieważ istnieje precedens z TortoiseSVN, używam "ignoruj przy zatwierdzaniu" w moich przykładach dla plików, których nie chcę zatwierdzać. Użyję słowa „praca” dla plików, które robię, ale możesz wybrać dowolną nazwę.
Najpierw dodaj wszystkie pliki do listy zmian o nazwie „praca”. To musi być uruchamiane z katalogu głównego twojej kopii roboczej:
Spowoduje to rekurencyjne dodanie wszystkich plików w kopii roboczej do listy zmian o nazwie „praca”. Jest to wada - ponieważ nowe pliki są dodawane do kopii roboczej, musisz specjalnie dodać nowe pliki, inaczej nie zostaną uwzględnione. Po drugie, jeśli będziesz musiał uruchomić to ponownie, będziesz musiał ponownie dodać wszystkie swoje pliki „ignoruj przy zatwierdzaniu”. Niezbyt idealne - możesz zacząć utrzymywać własną listę „ignorowanych” w pliku, tak jak robili to inni.
Następnie dla plików, które chcesz wykluczyć:
Ponieważ pliki mogą znajdować się tylko na jednej liście zmian, uruchomienie tego dodatku po poprzednim dodaniu „roboczym” usunie plik, który chcesz zignorować z listy zmian „pracy” i umieści go na liście zmian „ignoruj przy zatwierdzeniu”.
Kiedy jesteś gotowy do zatwierdzenia zmodyfikowanych plików, które chcesz zatwierdzić, możesz po prostu dodać „--cl work” do swojego zatwierdzenia:
Oto jak wygląda prosty przykład na moim komputerze:
Alternatywą byłoby po prostu dodanie każdego pliku, który chcesz zatwierdzić, do listy zmian „roboczych”, a nawet nie utrzymywanie listy ignorowanych, ale to też jest dużo pracy. Naprawdę, jedynym prostym, idealnym rozwiązaniem jest to, czy / kiedy zostanie zaimplementowane w samym SVN. Istnieje długotrwały problem dotyczący tego w narzędziu do śledzenia problemów Subversion, SVN-2858 , na wypadek gdyby miało się to zmienić w przyszłości.
źródło
$svn st --- Changelist 'ignore-on-commit': M database.php M config.php
i mimo to zostały wysłane do repozytorium po zatwierdzeniu. Masz jakiś pomysł, co zrobiłem źle?Konsekwentnie znajdowałem się w tej sytuacji: a listy zmian nie działają dla mnie - chcę zrobić krótką listę plików, których nie chcę zatwierdzać, zamiast utrzymywać ogromną listę plików, które chcę popełnić!
Pracuję w linii poleceń Linuksa: więc moim rozwiązaniem jest utworzenie skryptu / usr / bin / svnn (tak, z dwoma 'n'!) W następujący sposób:
Oczywiście jest to dostosowane do mojej sytuacji - ale po prostu zmień DIR i IGNORE_FILES, aby pasowały do ustawień programisty. Pamiętaj, aby zmienić skrypt na wykonywalny za pomocą:
.. potem po prostu używasz "svnn" zamiast "svn", aby uruchomić subversion bez obawy o sprawdzanie lokalnych zmian w plikach na liście IGNORE_FILES. Mam nadzieję, że to pomoże!
źródło
svnn ignore configs/*
- z symbolami wieloznacznymi i dzwonkami i gwizdkami. Myślę, że sam coś takiego piszę, a potem wracam!svnn
, rozważ wywołanie gosvn
i umieszczenie tego skryptu w czymś, co może znajdować się na początku ścieżki PATH, na przykład${HOME}/bin
. Z samego skryptu zadzwonisz/usr/bin/svn
.Nie wierzę, że istnieje sposób na zignorowanie pliku w repozytorium. Często spotykamy się z tym w przypadku pliku web.config i innych plików konfiguracyjnych.
Chociaż nie jest to idealne rozwiązanie, najczęściej widzę i używam pliku .default i nie ma żadnego zadania tworzenia kopii lokalnych.
Na przykład w repozytorium jest plik o nazwie,
web.config.default
który ma wartości domyślne. Następnie utwórz zadanie nant, które zmieni nazwy wszystkichweb.config.default
plików na,web.config
które można następnie dostosować do wartości lokalnych. To zadanie powinno być wywoływane po pobraniu nowej kopii roboczej lub uruchomieniu kompilacji.Musisz także zignorować utworzony
web.config
plik, aby nie został zatwierdzony w repozytorium.źródło
Sprawdź listy zmian , które zapewniają opcję odfiltrowania plików, które zostały zmienione, ale nie chcesz ich zatwierdzać. SVN nie pominie automatycznie pliku, chyba że mu to powiesz - a sposób, w jaki można powiedzieć, że ten plik różni się w jakiś sposób od innych plików, polega na umieszczeniu go na liście zmian.
Wymaga to od ciebie więcej pracy i możesz zastosować listę zmian tylko do kopii roboczej (oczywiście wyobraź sobie chaos, który mógłby powstać, gdybyś mógł zastosować właściwość „nigdy nie aktualizuj” do wersji!).
źródło
Przyszedłem do tego wątku, szukając sposobu na wykonanie "atomowego" zatwierdzenia tylko niektórych plików i zamiast ignorować niektóre pliki przy zatwierdzaniu, poszedłem w drugą stronę i zatwierdziłem tylko te pliki, które chciałem:
Może to komuś pomoże.
źródło
svn ci
jest po prostu aliasem dosvn commit
. Polecenie Commit pozwala na wykonanie określonego zatwierdzenia określonych plikówChłopaki, właśnie znalazłem rozwiązanie. Biorąc pod uwagę, że TortoiseSVN działa tak, jak chcemy, próbowałem zainstalować go pod Linuksem - co oznacza, że działa na Wine. O dziwo to działa! Wszystko co musisz zrobić to:
(Powodem, dla którego trzeba wykluczyć pliki przez CLI, jest to, że nie znaleziono wpisu menu, który to robi, nie wiem dlaczego. W każdym razie działa to świetnie!)
źródło
Pliki w konflikcie nie mogą być zatwierdzane. Możesz to wykorzystać, aby zachować prywatne zmiany poza repozytorium. Działa to najlepiej w przypadku małej liczby plików.
Aby uzyskać konflikt dla
a-file
, twoja kopia robocza (WC) nie ma aktualnych danycha-file
z repozytorium i żea-file
w twoim WC są zmiany, które są w tej samej lokalizacji co zmiany w repozytorium (zmiany, których nie zaktualizowałeś do jeszcze). Jeśli nie chcesz czekać na powyższe warunki, możesz stworzyć konflikt wa-file
następujący sposób:W kopii roboczej 1 (WC1) dodaj wiersz tekstu na początku
a-file
, na przykład „zrób tutaj konflikt” . Użyj niezbędnej składni, aby nie uszkodzić repozytorium. Zatwierdźa-file
z WC1. W WC2 dodaj inny wiersz tekstu na początkua-file
, np. „Chcę konfliktu” . Aktualizacja z WC2, a teraz plik a powinien być w konflikcie.źródło
Zamiast tego napisałbym pomocniczy skrypt bash, który działa
svn commit
na wszystkich plikach, których potrzebujesz, i na żadnym z tych, których nie potrzebujesz. W ten sposób masz dużo większą kontrolę.Na przykład za pomocą jednej linii możesz zatwierdzić wszystkie pliki z rozszerzeniem
.h
i.cpp
do których wprowadziłeś zmiany (i które nie spowodowałyby konfliktu):Zmień / dodaj rozszerzenia
[h|cpp]
części. W-m ""
razie potrzeby dodaj komunikat dziennika między cudzysłowami .źródło
Niektóre z proponowanych pomysłów można zrealizować w następujący sposób:
W systemie Windows w programie PowerShell
dodaj wszystko do domyślnej listy.ps1
dodaj do ignorowania list.ps1
Teraz możesz aliasować
svn ci --changelist default
, aby nie musieć go określać za każdym razem. Dodatkową korzyścią jest to, że możesz przechowywać listę ignorowanych przy zatwierdzaniu (jeśli chcesz) w repozytorium.Robię to dla niektórych plików, które są stale odtwarzane, ale rzadko zmieniane ręcznie. Na przykład dodaję numer wersji do moich plików konfiguracyjnych w określonych elementach zastępczych, aby pliki były zmieniane przy każdym zatwierdzeniu, ale ręczne zmiany są rzadkie.
źródło
Zmęczyło mnie czekanie, aż to zostanie wbudowane w SVN. Używałem tortoiseSVN z ignorowaniem przy zatwierdzaniu, ale to wyskakuje okno dialogowe użytkownika, którego nie można ukryć z wiersza poleceń, a kiedy uruchamiam skrypt kompilacji i robię filiżankę herbaty, nienawidzę tego, kiedy Wracam, aby odkryć, że czeka na wprowadzenie danych przez użytkownika w 10%.
Oto skrypt PowerShell dla systemu Windows, który zatwierdza tylko pliki, których nie ma na liście zmian:
źródło
Aktualizacja skryptu user88044.
Chodzi o to, aby przesłać pliki z listy zmian do niezatwierdzania zmian i uruchomić zły skrypt.
Skrypt wyodrębnia pliki do-not-commit z polecenia: svn status --changelist 'do-not-commit'
Skrypt znajduje się w / usr / bin / svnn (sudo chmod + x / usr / bin / svnn)
status svnn, zatwierdzenie svnn itp ...
źródło
Możesz skonfigurować listę zmian "ignoruj przy zatwierdzaniu" bezpośrednio z TortoiseSVN. Nie ma potrzeby konfigurowania żadnej innej listy zmian, w tym wszystkich innych plików
1) Kliknij „SVN Commit ...” (nie zatwierdzimy, tylko sposób na znalezienie graficznego menu dla listy zmian) 2) Na liście Kliknij prawym przyciskiem myszy plik, który chcesz wykluczyć. 3) Menu: przejdź do listy zmian> ignoruj przy zatwierdzeniu
Następnym razem, gdy wykonasz zatwierdzenie SVN ... Pliki pojawią się bez zaznaczenia na końcu listy, w kategorii ignoruj przy zatwierdzaniu.
Testowano z: TortoiseSVN 1.8.7, kompilacja 25475-64 bity, 2014/05/05 20:52:12, Subversion 1.8.9, -release
źródło
To już późno w grze, ale znalazłem najbardziej niesamowite polecenie wiersza poleceń dla tego problemu. Gotowe za pomocą basha. Cieszyć się.
Ok, więc oto wyjaśnienie polecenia. Niektóre rzeczy będą musiały zostać zmienione w zależności od przypadku użycia.
Otrzymuję listę wszystkich plików. Wszystkie zaczną się od tych znaków statusu (?,!, A itd.). Każdy jest na osobnych liniach
Używam grep do filtrowania listy. Może być używany normalnie (do dołączania) lub z flagą -v (do wykluczania). W tym przypadku służy do wykluczania, a fraza „wyklucza” oznacza to, co zostanie wykluczone.
Teraz usuwam znak statusu i odstępy na początku każdej linii, a następnie cytuję każdą linię, używając seda. Niektóre z moich nazw plików zawierają spacje, stąd cytat.
Używając tr, zamieniam wszystkie znaki nowej linii na spacje. Teraz cała moja lista plików do zatwierdzenia znajduje się w jednej linii.
Na koniec używam xargs do wykonania polecenia commita z komunikatem. Wykonuje zatwierdzenie i upuszcza moją listę plików w cudzysłowie jako ostatni argument.
W rezultacie wszystko ostatecznie działa tak, jak tego chcę. Wciąż nienawidzę svn za zmuszanie mnie do skakania przez te cholerne obręcze, ale mogę z tym żyć. Zgaduję.
źródło
Ponieważ miałem dokładnie ten sam problem, a moje wyszukiwanie w Google wciąż nic mi nie dawało, myślę, że znalazłem obejście. Oto, co zrobiłem, wydaje się, że działa dla mnie, ale ponieważ utknąłem na starej wersji SVN (<1.5, ponieważ nie ma opcji --keep-local) i nie jestem w tym ekspertem , Nie jestem pewien, czy to uniwersalne rozwiązanie. Jeśli u Ciebie też to zadziała, daj mi znać!
Miałem do czynienia z instalacją Prestashop, którą dostałem z SVN, ponieważ inne osoby już zaczęły nad nią pracować. Ponieważ ustawienia DB zostały wykonane dla innego serwera, zmieniłem je w jakimś pliku w folderze / config. Ponieważ ten folder był już wersjonowany, ustawienie go w svn: ignore nie zapobiegłoby zatwierdzeniu moich lokalnych modyfikacji w tym folderze. Oto co zrobiłem:
Teraz mogę uruchomić svn add --force. w katalogu głównym repozytorium bez dodawania mojej konfiguracji, nawet jeśli nie pasuje do wersji repozytorium (myślę, że musiałbym przejść przez to wszystko jeszcze raz, gdybym zmodyfikował to jeszcze raz, nie testowałem). Mogę również zaktualizować svn bez nadpisywania moich plików lub otrzymywania jakichkolwiek błędów.
źródło
Rozwiązanie, które nie ignoruje zmian we właściwościach katalogu
Próbowałem użyć rozwiązania opartego na
changelist
, ale mam z nim kilka problemów. Najpierw moje repozytorium zawiera tysiące plików, więc lista zmian do zatwierdzenia jest ogromna, a mojesvn status
dane wyjściowe stały się zbyt długie i musiały zostać przeanalizowane, aby były przydatne. Najważniejsze jest to, że chciałem zatwierdzić zmiany, które pochodzą z scalenia, co oznacza, że obejmują one zmiany właściwości. Podczas zatwierdzania listy zmian właściwości svn dołączone do katalogu nie są zatwierdzane, więc musiałem wykonać dodatkowe zatwierdzenie:Być może będziesz musiał to zrobić dla kilku katalogów (tutaj rejestruję właściwości
DIR
i bieżącego katalogu.
), w zasadzie tych z literąM
w drugiej kolumnie podczas wydawaniasvn status
polecenia.Rozwiązanie
Użyłem łatek i
svn patch
. W pseudokodzie:Podobnie jak inne plakaty, w końcu używam skryptu do przechowywania listy plików do zignorowania:
Zwykle używałem go z
ci
irevert -R .
.źródło
svn:ignore
to twoja odpowiedź.Przykład:
źródło
*.xml
jest wzorzec plików do ignorowania; możesz tu również używać nazw katalogów.źródło