CVS na OS X Mavericks


17

Najwyraźniej Apple usunęło CVS w devtools Mavericks OS X 10.9 (i tak, naprawdę zniknęło). Dla niewtajemniczonych CVS to system współbieżnej wersji , narzędzie do aktualizowania plików między różnymi komputerami i użytkownikami (programistami).

Mam kilka starszych projektów, które wciąż tego wymagają (nie, nie mogę go zmienić na SVN, a tym bardziej na git).

Gdzie jest najlepsze miejsce, aby uzyskać wersję, która działa w systemie OS X Mavericks?


Czy sprawdziłeś, czy nadal jest włączony /usr/bin/cvs?
nohillside

Tak, to naprawdę zniknęło.
Andrew Jaffe,

Odpowiedzi:


16

Najprostszym sposobem dla większości programów jest instalacja za pomocą menedżera pakietów, takiego jak Macports, Homebrew lub Fink. Portierzy rozwiążą problemy związane z przenoszeniem kodu do OSX, więc powinno to być tak proste jak poniżej (dla Macports )

  1. Zainstaluj Macports, pobierz plik .pkg i uruchom go
  2. Zainstaluj Xcode i jego narzędzia wiersza poleceń
  3. Dodaj /opt/local/bindo swojej ścieżki - instalator próbuje to zrobić za Ciebie, więc prawdopodobnie po prostu musisz to sprawdzić
  4. Zainstaluj port sudo port install cvs
  5. Uruchom cvs albo z pełną ścieżką, /opt/local/bin/cvsalbo użyj swojej ŚCIEŻKI

16

Menedżer pakietów uniksowych jest zdecydowanie najlepszym rozwiązaniem. Przeniosłem się z Fink i Macports do Homebrew , który ma przepis na CV:

brew install cvs

Do historycznego kompletności, to dawniej musiał użyć (nieco trudne do znalezienia) przepis na CVS : brew install homebrew/dupes/cvs.

Po tylko bardzo minimalnych testach wydaje się, że działa.


3
Próbowałem nieco krótszego polecenia brew install cvs(OS 10.9, Homebrew 0.9.5); zainstalował CVS 1.12.13, który wydaje się działać.
nknight,

3
Tak, polecenie nknighta jest właściwe. Polecenie uległo zmianie, ponieważ formuła CVS została przeniesiona z homebrew-dupes do rdzenia Homebrew w listopadzie 2013 r.
herzbube

2

edycja: Jak zauważono w komentarzach, git wymaga działającego klienta cvs, co sprawia, że ​​takie podejście jest po prostu ładną warstwą międzyoperacyjną, ale nie rozwiązaniem problemu braku klienta csv.

Inną opcją byłoby użycie git jako klienta cvs i bezpośrednie przesłanie do serwera CVS.

W zależności od potrzeb może to być wystarczające współdziałanie cvs + korzyść z używania git lokalnie.


Nie miałem pojęcia, że ​​możesz to zrobić. Bardzo fajny!
Andrew Jaffe,

2
Próbowałem tego, ale git-cvsimportwydaje się, że wymaga klienta CVS, więc jest to problem z kurczakiem i jajkami.
David Moles,

1
Dzięki @DavidMoles. Zmieniłem odpowiedź, aby upewnić się, że wszyscy są świadomi tego ograniczenia. Sam tego wcześniej nie próbowałem.
OliverS,

0

CVSNT działa na Mac OS X 10.9 i obsługuje kodowanie zasobów HQX itp. Beta dla 10.9 jest dostępna tutaj: http://march-hare.com/cvspro/#downcvsnt

Jeśli wcześniej korzystałeś z Mac CVS ​​X, to (CVSNT) jest „wierszem poleceń”, który był wcześniej dołączony.


1
Witamy na stronie. Proszę zajrzeć na apple.stackexchange.com/help/behavior , szczególnie część o autopromocji.
nohillside

Jestem prawie pewien, że mój komentarz był odpowiedni do zadanego pytania, a moja przynależność do produktu jest dobrze znana i jednoznacznie zidentyfikowana (np .: mój awatar jest logo firmy) i jestem członkiem projektu Concurrent Versions System .
Arthur Barrett

0

Właśnie miałem ten sam problem, a dużym problemem z Macports, Fink itp. Jest to, że biorą one wiele innych zależności, co jest mylące i niepotrzebne, jeśli wszystko czego potrzebujesz to pojedyncze narzędzie, takie jak cvs. W moim przypadku próba zainstalowania go za pomocą Macports spowodowała pojawienie się wyskakującego okienka z prośbą o zainstalowanie kompilatora Java (?!) I trzeba było zbudować dziesiątki innych pakietów, więc szybko wyciągnąłem eject :)

Jeśli wszystko czego potrzebujesz to cvs, samo zbudowanie go jest łatwe i bardziej czyste, a wynikowy plik binarny integruje się ze wszystkimi istniejącymi bibliotekami lib itp. Na komputerze. Potrzebujesz zainstalowanego Xcode i jego narzędzi wiersza poleceń, ale jeśli potrzebujesz cvs, jestem pewien, że już go zainstalowałeś.

Pobierz kod źródłowy cvs z:

http://download.savannah.gnu.org/releases/cvs/source/stable/1.11.23/

rozpakuj go do folderu, wejdź do folderu i uruchom ./configure

Następnie (niestety) musisz edytować pliki w src / i lib /, aby zmienić nazwę ich funkcji getline na, powiedzmy, getlineX, ponieważ getline koliduje z funkcją libc. Mógłbym zrobić łatkę tego i umieścić gdzieś chyba ...

Następnie zrób „make”, a dostaniesz plik binarny w src / cvs, który możesz umieścić w folderze ~ / bin lub w dowolnym innym miejscu, i upewnij się, że ścieżka PATH tam wskazuje.


> Mógłbym zrobić łatkę tego i chyba gdzieś umieścić. To byłoby miłe i warte złożenia odpowiedzi. (Nie jest to dla mnie pilne, ogólnie mam szczęście z Homebrew.)
Flash Sheridan

0

Po odpowiedzi na odpowiedź BjornW z łatką.

Po pobraniu i rozpakowaniu źródła ze strony: http://download.savannah.gnu.org/releases/cvs/source/stable/1.11.23/

Skopiuj poniższą łatkę do jakiegoś pliku, powiedzmy cvs-1.11.23.patch, a następnie zastosuj łatkę za pomocą:

patch -d cvs-1.11.23 -p1 < cvs-1.11.23.patch

Następnie skompiluj zgodnie z READMEinstrukcjami w pliku cvs-1.11.23 :

cd cvs-1.11.23
./configure
make
make install

Oto łatka:

diff -r -u cvs-1.11.23/lib/getline.c cvs-1.11.23-osx/lib/getline.c
--- cvs-1.11.23/lib/getline.c   2005-04-05 06:46:05.000000000 +1000
+++ cvs-1.11.23-osx/lib/getline.c       2017-01-31 12:04:19.000000000 +1100
@@ -154,13 +154,10 @@
   return ret;
 }

-int
-getline (lineptr, n, stream)
-     char **lineptr;
-     size_t *n;
-     FILE *stream;
+ssize_t
+     getline(char ** restrict lineptr, size_t * restrict linecapp, FILE *     restrict stream)
 {
-  return getstr (lineptr, n, stream, '\n', 0, GETLINE_NO_LIMIT);
+  return (ssize_t)getstr (lineptr, linecapp, stream, '\n', 0, GETLINE_NO_LIMIT);
 }

 int
diff -r -u cvs-1.11.23/lib/getline.h cvs-1.11.23-osx/lib/getline.h
--- cvs-1.11.23/lib/getline.h   2005-04-05 06:46:05.000000000 +1000
+++ cvs-1.11.23-osx/lib/getline.h       2017-01-31 12:03:21.000000000 +1100
@@ -11,8 +11,8 @@    

 #define GETLINE_NO_LIMIT -1

-int
-  getline __PROTO ((char **_lineptr, size_t *_n, FILE *_stream));
+ssize_t
+  getline(char ** restrict linep, size_t * restrict linecapp, FILE * restrict stream);
 int
   getline_safe __PROTO ((char **_lineptr, size_t *_n, FILE *_stream,
                      int limit));
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.