赞
踩
一般情况下我们需要版本管理的所有文件都会在同一文件夹下,可以由一个git库来统一管理。可是有时我们也许会遇到这样的需求:
几个工程共用一个基础库工程,这几个工程都可以对此库进行修改,同时要保证共用、同步更新。如我们有管理的资料库A、资料库B,都需要包含共享资料库C,A、B都可对资料C中的文档进行更新。同时要保证用户查看最新版本的A、B库时要保证看到的共享资料库C中的资料都是最新的且是同一份,此时我们就需要A、B共享一处C库的引用,但是git库要使用快捷方式是不会更新到原文件的,如何才能共享呢?
此时在B库中创建C库的创建硬连接(hard link)即可像操作普通文件夹一样操作C。
一图以弊之,快速理解:
硬连接:同一文件的不同别名,指向的是真实的文件,文件的移动不影响硬连接的使用,不可跨文件系统创建。
软连接:区别于指向的文件,软连接本身是一个真实的文件,文件内容为指向文件的地址信息,所以原文件的文件名修改或文件移位会使软连接失效。Windows中的普通快捷方式就是一种软链接。
知道硬连接的概念后就可以大致明白如何做了。
比如将共享库workspaceC放到git库workspaceA中,在workspaceB中创建workspaceC的硬连接即可让workspaceB成功包含workspaceC.
各平台下创建硬连接的方法如下:
使用 brew install hardlink-osx
create a hard link: hln source destination
remove the link: hln -u destination
或者也可以手动编译一版本:
#include <unistd.h>
#include <stdio.h>
int main(int argc, char *argv[])
{
if (argc != 3) return 1;
int ret = link(argv[1], argv[2]);
if (ret != 0) perror("link");
return ret;
}
在Terminal中编译:
gcc -o hlink hlink.c -Wall
调用:
./hlink workspaceA/workspaceC workspaceB/workspaceC
使用mklink命令,创建的硬连接文件夹/文件会有快捷方式图标:
C:\Users\usename>mklink
创建符号链接。
MKLINK [[/D] | [/H] | [/J]] Link Target
/D 创建目录符号链接。默认为文件
符号链接。
/H 创建硬链接而非符号链接。
/J 创建目录联接。
Link 指定新的符号链接名称。
Target 指定新链接引用的路径
(相对或绝对)。
创建目录硬连接只使用j参数即可。
mklink /j workspaceA/workspaceC workspaceB/workspaceC
shell中使用ln命令,貌似无法为文件夹创建硬连接。
ln src dest
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。