Jaki system kontroli wersji może zarządzać wszystkimi aspektami? [Zamknięte]

17

Kilka miesięcy temu kopałem w Subversion i GIT i byłem rozczarowany. Obsługują kod źródłowy w porządku, ale nie w innych aspektach. Na przykład witryna internetowa pod kontrolą wersji musi zarządzać własnością pliku / katalogu, dostępem do odczytu i zapisu pliku / katalogu, listami kontroli dostępu, znacznikami czasu, zawartością bazy danych. i linki zewnętrzne. Czy istnieje system kontroli wersji, który może wykonać równie doskonałą rewersję jak przeładowanie z miesięcznej kopii zapasowej?

Andy Canfield
źródło
12
Wygląda na to, że zamiast tego chcesz mieć system zapasowy?
Macke,
2
Czy zastanawiałeś się nad uruchomieniem witryny w systemie OS X na komputerze Mac? Time Machine jest prawdopodobnie najprostszym dostępnym obecnie rozwiązaniem do tworzenia kopii zapasowych i bardzo łatwo go przywrócić w razie potrzeby.
1
Jeśli jesteś poważnie zainteresowany tym tematem, powinieneś rzucić okiem na badania nad wersjonowaniem systemów plików i bazami danych wersji, które wykraczają poza systemy kontroli wersji dla kodu źródłowego.
Jakob,
co jest złego w pisaniu trochę skryptów do obsługi takich rzeczy, których SCM nie obsługuje? w ten sposób otrzymujesz to, czego chcesz ORAZ kontrolujesz źródło.
Newtopian,

Odpowiedzi:

44

Jesteś zdezorientowany co do roli systemu kontroli wersji. Nie jest i nigdy nie miał być systemem zapasowym dla działającej strony internetowej. Bardzo dobrze radzi sobie z zarządzaniem zawartością statyczną, aby przejść do produkcji w kontrolowany sposób. Przy prawidłowym stosowaniu tagowania i automatycznych kasach nawet szybko zmieniające się strony mogą być przechowywane w systemie kontroli wersji.

System kontroli wersji będzie w stanie powiedzieć ci, jak uzyskałeś wygląd strony w zeszłym miesiącu do tego, jak wygląda dzisiaj (przynajmniej w przypadku tych komponentów, które są pod kontrolą źródła). Powinien zawierać wszystko, czego potrzebujesz do przebudowania witryny (z wyjątkiem treści dynamicznych). Jak zauważyli inni, wszelkie zmiany w uprawnieniach i prawach własności powinny być zapisywane w skrypcie, a ten skrypt powinien być uwzględniony w kontroli wersji.

Uprawnienia dostępu do stron internetowych są zazwyczaj dość proste. (Zasadniczo musisz upewnić się, że serwer sieciowy może odczytać całą zawartość i napisać bardzo mało). Z wyjątkiem własności katalogu do kilku katalogów, które muszą być zapisywalne przez subversion serwera WWW i być może git, z pewnością mogą obsłużyć uprawnienia. Katalogi, w których serwer WWW może zapisywać, zazwyczaj zawierają treści dynamiczne (tworzone i aktualizowane ze strony internetowej), którymi zarządza się niezależnie od źródła stron internetowych.

Gdybym został poproszony o pracę z witryną o skomplikowanych uprawnieniach i listach kontroli dostępu w witrynie, miałbym poważne obawy dotyczące procesu zarządzania tą witryną. Wdrożenie systemu kontroli wersji i przeniesienie do niego list ACL byłoby jednym z rozwiązań, które poważnie rozważę.

Treści dynamiczne, takie jak wpisy na blogu lub komentarze, są zwykle zawarte w bazie danych lub innym magazynie danych, a nie w kontroli wersji używanej do tworzenia witryny. Magazyn danych może być skonfigurowany w celu zapewnienia kontroli wersji jego zawartości (podobnie jak to oprogramowanie). Wiele stron Wiki używa systemu kontroli wersji do śledzenia zmian.

EDYTOWAĆ:

Poprawka, której używam to (a) Brak kontroli wersji, (b) Witryna produkcyjna jest witryną główną, (c) Archiwizuj za każdym razem, gdy coś się zmieni, (d) Skrypt archiwizujący usuwa śmieci takie jak ACL i (e) skrypt instalacyjny naprawia inne niepotrzebne uprawnienia do plików.

Problemy te można rozwiązać, importując witrynę do systemu kontroli wersji i zmieniając proces, tak aby witryna główna była aktualizowana przez ten system. (a), (b) i (c) są obsługiwane bezpośrednio przez kontrolę wersji. Możesz oznaczyć wydania, aby (c) działało lepiej. (d) generalnie nie stanowi problemu, jeśli tylko system wdrażania zmienia witrynę. Nigdy nie potrzebowałem list ACL dla treści witryny.

(e) powinien być uruchamiany tylko przy początkowym utworzeniu i większych zmianach. Może także zawierać skrypt aktualizujący witrynę z poziomu kontroli wersji i często uruchamiany. Te skrypty są zwykle dość proste, gdy trzymasz witrynę w systemie kontroli awersji.

Ale dlaczego nikt nie zbudował ogólnego systemu do tego?

Ponieważ nie jest to konieczne, jeśli używasz systemu kontroli wersji.

System kontroli wersji Mógłby śledzić wszystkie te rzeczy, ale żaden nie.

Zarówno CVS, jak i Subversion śledzą to, co musisz śledzić, jeśli ich używasz. Nie będą śledzić rzeczy, które musisz śledzić, ponieważ nie używasz systemu kontroli wersji, nie powinni też. Śledzą to, co należy śledzić, gdy korzystasz z systemu kontroli wersji.

Pracowałem z kilkoma witrynami, które zarządzały ich zawartością za pomocą kontroli wersji. Wszystkie miały różne wymagania dotyczące witryn przemieszczania, częstotliwości wdrażania i kompletności aktualizacji. Gdy witryny były już w kontroli wersji, pozostałe wymagania były stosunkowo łatwe do spełnienia. Dokumentacja zarówno dla CVS, jak i Subversion sugeruje możliwe metody aktualizacji.

Możesz potrzebować list ACL, aby ograniczyć dostęp do określonych obszarów w treści kontrolowanej wersją. Jednak zazwyczaj pracuję na zasadzie zaufania. Kontrola wersji ułatwia sprawdzenie, kto co zrobił, kiedy. Jeśli nie sformatujesz plików, łatwo jest uzyskać historię pliku z adnotacjami pokazującą, kto dodał, które wiersze kiedy.

BillThor
źródło
+1 za wyjaśnienie powodów, dla których pytanie jest błędne od samego początku.
Macke,
2
+1 Niemniej jednak dobrze, że pytanie zostało zadane, aby inni mogli skorzystać z Twojej odpowiedzi.
oliver-clare,
System kontroli wersji powinien dać mi możliwość powiedzenia „OK, na tym innym komputerze tutaj, zbuduj mi witrynę od 28 lipca”. Kontrola wersji jest bardziej wydajna niż tworzenie kopii zapasowych, ponieważ śledzi zmiany. W przeciwnym razie tak, codzienna kopia zapasowa wykonałaby zadanie OK.
Andy Canfield,
Tak, poprawka, której używam to (a) Brak kontroli wersji, (b) Witryna produkcyjna jest witryną główną, (c) Archiwizuj za każdym razem, gdy coś się zmieni, (d) Skrypt archiwizujący usuwa śmieci takie jak ACL i ( e) skrypt instalacyjny naprawia inne niepotrzebne uprawnienia do plików. Ale dlaczego nikt nie zbudował ogólnego systemu do tego? System kontroli wersji Mógłby śledzić wszystkie te rzeczy, ale żaden nie.
Andy Canfield,
+1: Świetna odpowiedź. Chciałbym jednak dodać, że żaden system kontroli wersji nie śledzi takich rzeczy, ponieważ COULDN'T. Uprawnienia i nazwy użytkowników są specyficzne dla hosta, a ich format jest specyficzny dla systemu; narzędzie nie może automatycznie przenieść ich na inny host, zwłaszcza gdy jest to inny system operacyjny.
Jan Hudec
10

Wszystkie z nich i żadne z nich.

Nie jest dobrym pomysłem, aby uzyskać kontrolę źródła, aby bezpośrednio zarządzać tymi szczegółami, tak jak sugeruje to pytanie.

Możesz jednak napisać skrypt bash (* nix) lub skrypt PowerShell (Windows), który osiąga jeden lub wszystkie z tych celów. Ten skrypt może być przechowywany w kontroli źródła.

Następnie możesz uczynić ten skrypt jednym z artefaktów kompilacji i uruchomić go w ramach wdrożenia.

pdr
źródło
To. Ideą posiadania źródeł jest to, że możesz wyciągnąć je ze swojego VCS i użyć ich do zbudowania gotowego produktu.
Blrfl,
2

IMHO system kontroli wersji sam w sobie nie jest przeznaczony do użycia w ten sposób.

Ale staram się upewnić, że możesz uzyskać wersję z kontroli źródła, wystarczy uruchomić tylko jeden plik kompilacji / plik PowerShell, a wszystko będzie działać ponownie.

W tym celu musisz:

  • wszystkie biblioteki, od których aplikujesz, zależą od kontroli źródła
  • plik kompilacji, który określa środowisko
  • instrukcja dotycząca wymagań twojego środowiska (nie chcesz umieszczać instalacji serwera SQL w kontroli źródła)
KeesDijk
źródło
1

Wierzę, że w twoim przypadku potrzebujesz narzędzia do zarządzania konfiguracją . Ten, którego użyłem, jest marionetką .

Cytując cię:

zarządzać własnością pliku / katalogu, dostępem do odczytu i zapisu pliku / katalogu,

Zrobiłem to za pomocą jednej linii (upewnij się, że użytkownik istnieje, upewnij się, że istnieje katalog itp.) ...

Listy kontroli dostępu,

Jeśli jest to Windows ACL, to istnieją specjalne narzędzia CM dla Windows ...

znaczniki czasu,

ponownie polecenie touch unix w jednym wierszu skryptu lalek może to zrobić za Ciebie.

zawartość bazy danych.

To jest wbudowane w wiele frameworków, zadanie cron, które zapewnia, że ​​wszystko jest tam inaczej?

i linki zewnętrzne.

Nic o tym nie wiem.

Oczywiście po napisaniu kodu zarządzania konfiguracją możesz chcieć umieścić go (lub pobrać w odpowiednich systemach) w systemie kontroli wersji. Nie uciekniesz od nich :-).

Dimitrios Mistriotis
źródło
Nie rozumiem, co masz na myśli przez „znaczniki czasu - znów jedno polecenie unixowe w jednym wierszu skryptu lalkowego mogłoby to zrobić”. W mojej witrynie, aby uzyskać wersję witryny, skanuje ona cały zestaw witryn i zwraca datę i godzinę najnowszego pliku. Chcę, aby moja kontrola wersji „Kasa” nadała plikom taki sam znacznik czasu, jaki mieli przy zameldowaniu, a nie ustawiono jako „teraz”. Jak to zrobić w jednym poleceniu uniksowym?
Andy Canfield,
oczywiście szukasz „dotyku”, sprawdź to: en.wikipedia.org/wiki/Touch_(Unix) . Zasadniczo podczas sprawdzania zostanie zastosowany czas teraz, ale jeśli z jakiegoś powodu chcesz innego znacznika czasu, oto jak to zrobić.
Dimitrios Mistriotis,
Naprawdę podobało mi się uzasadnienie twojego pytania, chcesz zautomatyzować tak dużo, jak to możliwe, co jest „właściwą drogą”, potrzebujesz trochę wiedzy, jak to zrobić i co idzie do VControl, a co nie. Chciałbym, żeby więcej ludzi z naszej branży myślało podobnie ...
Dimitrios Mistriotis,
0

Istnieje najlepszy system kontroli wersji, który zarządza wszystkimi aspektami wszystkich dokumentów cyfrowych. Nazywa się Xanadu i został stworzony przez Theodora Holma Nelsona w 1960 roku, jeszcze zanim systemy takie stały się popularne. Teoretycznie wszystko jest doskonale rozwiązane. W praktyce Xanadu nigdy nie został wdrożony zgodnie z przewidywaniami Nelsona, ale zainspirował wiele bardziej wyspecjalizowanych systemów, w tym sieć i systemy kontroli wersji. Prace Nelsona są nadal warte nowej lektury - i mogą odpowiedzieć na pytanie, dlaczego nie ma ogólnego VCS, który zarządzałby wszystkimi aspektami.

Jakob
źródło