显然,Apple已在OS X 10.9 Mavericks devtools下删除了CVS(是的,它确实消失了)。对于初学者来说,CVS是Concurrent Version System,它是一种用于使不同机器和用户(开发人员)之间的文件保持最新状态的工具。
我有一些遗留项目仍然需要它(不,我无法将其更改为使用SVN,更不用说git了)。
在OS X Mavericks下获得可用版本的最佳位置在哪里?
显然,Apple已在OS X 10.9 Mavericks devtools下删除了CVS(是的,它确实消失了)。对于初学者来说,CVS是Concurrent Version System,它是一种用于使不同机器和用户(开发人员)之间的文件保持最新状态的工具。
我有一些遗留项目仍然需要它(不,我无法将其更改为使用SVN,更不用说git了)。
在OS X Mavericks下获得可用版本的最佳位置在哪里?
Answers:
Unix软件包管理器显然是解决之道。我已经从芬克(Fink)和麦克波特(Macports)转到了自制软件,该软件具有cvs的配方:
brew install cvs
由于历史的完整性,您以前必须使用(稍微难找)为CVS配方:brew install homebrew/dupes/cvs
。
经过极少的测试后,它似乎可以正常工作。
brew install cvs
(OS 10.9,Homebrew 0.9.5);它安装了CVS 1.12.13,看起来很正常。
编辑:正如评论中所述,git需要一个工作的cvs客户端,这使得此方法只是一个很好的互操作层,但不能解决缺少csv客户端的问题。
另一种选择是将git用作cvs客户端,然后直接推送到CVS服务器。
根据您的需求,这可能足以实现cvs互操作+在本地使用git的优势。
git-cvsimport
似乎需要CVS客户端,所以这是鸡和鸡蛋的问题。
CVSNT在Mac OS X 10.9上运行,并且支持资源等的HQX编码。10.9的Beta版可在此处获得:http : //march-hare.com/cvspro/#downcvsnt
如果您以前使用过Mac CVS X,则此(CVSNT)是以前包含的“命令行”。
我只是遇到了同样的问题,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指向该目录。
跟进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));
/usr/bin/cvs
吗?