CVS на OS X Mavericks


17

Очевидно, Apple удалила CVS под OS X 10.9 Mavericks devtools (и да, это действительно ушло). Для непосвященных CVS - это Concurrent Version System , инструмент для обновления файлов между различными машинами и пользователями (разработчиками).

У меня есть несколько устаревших проектов, которые все еще нуждаются в этом (нет, я не могу изменить его, чтобы использовать SVN, тем более git).

Где лучше всего взять версию, которая работает под OS X Mavericks?


Вы проверили, находится ли он еще /usr/bin/cvs?
холме

Да, это действительно ушло.
Эндрю Джаффе

Ответы:


16

Самым простым способом для большинства программ является установка с помощью менеджера пакетов, такого как Macports, Homebrew или Fink. Портеры должны были решить проблемы с переносом кода на OSX, поэтому все должно быть так просто (для Macports )

  1. Установите macports, скачайте файл .pkg и запустите его
  2. Установите Xcode и его инструменты командной строки
  3. Добавьте /opt/local/binк своему пути - установщик попытается сделать это для вас, так что вам, вероятно, просто нужно проверить
  4. Установить порт sudo port install cvs
  5. Запустите cvs либо с полным путем, /opt/local/bin/cvsлибо используйте свой путь

16

Менеджер пакетов unix-ish - это, безусловно, верный путь. Я перешел с fink и Macports на homebrew , у которого есть рецепт для cvs:

brew install cvs

Для исторической полноты, вы прежде должны были использовать (немного трудно найти) рецепт для резюме : brew install homebrew/dupes/cvs.

Кажется, что после очень минимального тестирования это работает.


3
Я попробовал немного более короткую команду brew install cvs(OS 10.9, Homebrew 0.9.5); он установил CVS 1.12.13, который, кажется, работает.
nkight

3
Да, команда nknight является правильной. Команда изменилась, потому что формула CVS перешла от homebrew-dupes к ядру Homebrew в ноябре 2013 года.
herzbube

2

edit: как отмечено в комментариях, git требует работающего клиента cvs, что делает этот подход просто хорошим уровнем взаимодействия, но не решением проблемы отсутствующего клиента csv.

Другой вариант - использовать git в качестве клиента cvs и напрямую отправить его на сервер CVS.

В зависимости от ваших потребностей этого может быть достаточно cvs interop + преимущество локального использования git.


Я понятия не имел, что ты можешь сделать это. Очень круто!
Эндрю Джаффе

2
Я пробовал это, но, git-cvsimportкажется, требует клиента CVS, так что это проблема курицы и яйца.
Дэвид Моулз

1
Спасибо @DavidMoles. Я изменил ответ, чтобы убедиться, что все знают об этом ограничении. Я сам не пробовал раньше.
OliverS

0

CVSNT работает на Mac OS X 10.9 и поддерживает HQX-кодирование ресурсов и т. Д. Бета-версия для 10.9 доступна здесь: http://march-hare.com/cvspro/#downcvsnt

Если вы ранее использовали Mac CVS ​​X, то это (CVSNT) является «командной строкой», которая была ранее включена.


1
Добро пожаловать на сайт. Пожалуйста, посмотрите на apple.stackexchange.com/help/behavior , особенно в части о саморекламе.
холме

Я почти уверен, что мой комментарий имел отношение к заданному вопросу, и моя принадлежность к продукту хорошо известна и четко определена (например, мой аватар - это логотип компании), и я являюсь участником проекта системы параллельных версий .
Артур Барретт

0

У меня была такая же проблема, и большая проблема с Macports, Fink и т. Д. Заключается в том, что они тянут множество других зависимостей, что сбивает с толку и не нужно, если все, что вам нужно, - это один инструмент, такой как cvs. В моем случае, попытка установить его с помощью macports привела к появлению всплывающего окна с просьбой установить Java-компилятор (?!), И нужно было собрать десятки других пакетов, поэтому я быстро вытащил eject :)

Если все, что вам нужно, это cvs, просто создать его самостоятельно и сделать его более чистым, а полученный бинарный файл интегрируется со всеми существующими библиотеками и т. Д. На компьютере. Вам действительно нужно установить Xcode и его инструменты командной строки, но если вам нужен cvs, я уверен, что вы уже установили это.

Получите исходный код cvs из:

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

распакуйте его в папку, введите папку и запустите ./configure

Затем (к сожалению) вам нужно отредактировать файлы в src / и lib /, чтобы переименовать их функцию getline, скажем, в getlineX, потому что getline конфликтует с функцией libc. Я мог бы сделать патч этого и положить куда-нибудь, я думаю ..

После этого выполните команду «make», и вы получите двоичный файл в src / cvs, который вы можете поместить в папку ~ / bin или где-либо еще, и убедитесь, что ваш PATH указывает туда.


> Я мог бы сделать патч из этого и положить куда-нибудь, я думаю. Это было бы хорошо, и стоит представить обратно. (Не срочно для меня, у меня вообще есть удача с Homebrew.)
Флэш Шеридан

0

В ответ на ответ BjornW с патчем.

После загрузки и разархивирования источника по адресу : http://download.savannah.gnu.org/releases/cvs/source/stable/1.11.23/

Скопируйте патч ниже в какой-нибудь файл, скажем cvs-1.11.23.patch, затем примените патч с помощью:

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

Затем соберите в соответствии с READMEинструкциями файла cvs-1.11.23 :

cd cvs-1.11.23
./configure
make
make install

Вот патч:

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));
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.