OS X Mavericks上的CVS


17

显然,Apple已在OS X 10.9 Mavericks devtools下删除了CVS(是的,它确实消失了)。对于初学者来说,CVS是Concurrent Version System,它是一种用于使不同机器和用户(开发人员)之间的文件保持最新状态的工具。

我有一些遗留项目仍然需要它(不,我无法将其更改为使用SVN,更不用说git了)。

在OS X Mavericks下获得可用版本的最佳位置在哪里?


您检查它是否还在/usr/bin/cvs吗?
nohillside

是的,它真的消失了。
Andrew Jaffe

Answers:


16

对于大多数程序而言,最简单的方法是使用Macports,Homebrew或Fink之类的软件包管理器进行安装。搬运工将解决将代码移植到OSX的问题,因此它应该简单如下(对于Macports

  1. 安装macports,下载.pkg文件并运行
  2. 安装Xcode及其命令行工具
  3. 添加/opt/local/bin到您的路径-安装程序会尝试为您执行此操作,因此您可能只需要检查
  4. 安装端口 sudo port install cvs
  5. 使用完整路径/opt/local/bin/cvs或使用PATH 运行cvs

16

Unix软件包管理器显然是解决之道。我已经从芬克(Fink)麦克波特(Macports)转到了自制软件,该软件具有cvs的配方:

brew install cvs

由于历史的完整性,您以前必须使用(稍微难找)为CVS配方brew install homebrew/dupes/cvs

经过极少的测试后,它似乎可以正常工作。


3
我尝试了更短的命令brew install cvs(OS 10.9,Homebrew 0.9.5);它安装了CVS 1.12.13,看起来很正常。
nknight 2013年

3
是的,nknight的命令是正确的命令。该命令已更改,因为CVS公式在2013
复制

2

编辑:正如评论中所述,git需要一个工作的cvs客户端,这使得此方法只是一个很好的互操作层,但不能解决缺少csv客户端的问题。

另一种选择是将git用作cvs客户端,然后直接推送到CVS服务器。

根据您的需求,这可能足以实现cvs互操作+在本地使用git的优势。


我不知道你能做到这一点。很酷!
Andrew Jaffe

2
我试过了,但是git-cvsimport似乎需要CVS客户端,所以这是鸡和鸡蛋的问题。
David Moles,2015年

1
谢谢@DavidMoles。我更改了答案,以确保每个人都知道此限制。我以前没有尝试过。
奥利弗

0

CVSNT在Mac OS X 10.9上运行,并且支持资源等的HQX编码。10.9的Beta版可在此处获得:http : //march-hare.com/cvspro/#downcvsnt

如果您以前使用过Mac CVS X,则此(CVSNT)是以前包含的“命令行”。


1
欢迎来到该网站。请查看apple.stackexchange.com/help/behavior,尤其是有关自我推广的部分。
nohillside

我非常确定我的评论与所提出的问题有关,并且我与该产品的隶属关系是众所周知的并且已明确标识(例如:我的头像是公司徽标),并且我是Concurrent Versions System项目的成员。
亚瑟·巴雷特

0

我只是遇到了同样的问题,Macports,Fink等的一个大问题是它们引入了许多其他缺陷,如果您只需要一个像cvs这样的工具,那么它们就会造成混乱并且不必要。在我的情况下,尝试使用macports安装它会导致弹出窗口,要求我安装Java编译器(?!),还必须构建许多其他数据包,因此我迅速退出了:)

如果您只需要cvs,则只需自己构建即可,而且更加干净,并将生成的二进制文件与计算机上所有现有的lib等集成在一起。您确实需要安装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感到幸运。)
Flash Sheridan

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

然后按照cvs-1.11.23 README文件说明进行构建:

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));
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.