让git库目录共享:git库中引用文件夹/文件

前言

一般情况下我们需要版本管理的所有文件都会在同一文件夹下,可以由一个git库来统一管理。可是有时我们也许会遇到这样的需求:
几个工程共用一个基础库工程,这几个工程都可以对此库进行修改,同时要保证共用、同步更新。如我们有管理的资料库A、资料库B,都需要包含共享资料库C,A、B都可对资料C中的文档进行更新。同时要保证用户查看最新版本的A、B库时要保证看到的共享资料库C中的资料都是最新的且是同一份,此时我们就需要A、B共享一处C库的引用,但是git库要使用快捷方式是不会更新到原文件的,如何才能共享呢?
此时在B库中创建C库的创建硬连接(hard link)即可像操作普通文件夹一样操作C。

硬连接与软连接

一图以弊之,快速理解:
hard link and soft link

硬连接:同一文件的不同别名,指向的是真实的文件,文件的移动不影响硬连接的使用,不可跨文件系统创建。
软连接:区别于指向的文件,软连接本身是一个真实的文件,文件内容为指向文件的地址信息,所以原文件的文件名修改或文件移位会使软连接失效。Windows中的普通快捷方式就是一种软链接。

知道硬连接的概念后就可以大致明白如何做了。
比如将共享库workspaceC放到git库workspaceA中,在workspaceB中创建workspaceC的硬连接即可让workspaceB成功包含workspaceC.

各平台下创建硬连接的方法如下:

OSX

使用  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

Windows

使用mklink命令,创建的硬连接文件夹/文件会有快捷方式图标:

C:\Users\usename>mklink
创建符号链接。

MKLINK [[/D] | [/H] | [/J]] Link Target

        /D      创建目录符号链接。默认为文件
                符号链接。
        /H      创建硬链接而非符号链接。
        /J      创建目录联接。
        Link    指定新的符号链接名称。
        Target  指定新链接引用的路径
                (相对或绝对)。

创建目录硬连接只使用j参数即可。

mklink /j workspaceA/workspaceC workspaceB/workspaceC

Linux

shell中使用ln命令,貌似无法为文件夹创建硬连接。

ln src dest
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值