如何通过Git关联两个已有非空目录 仅同步指定共享文件
Git 共享仓库搭建方案
1. 初始化远端仓库
创建空的远端Git仓库,无需提前提交任何初始化文件。
2. 你的本地配置操作
- 进入本地Root目录,执行
git init初始化本地仓库 - 新建
.gitignore文件,写入如下规则,实现仅同步指定文件、忽略其他所有内容的效果:
# 先默认忽略根目录下所有内容 /* # 放开Folder_A的目录权限 !/Folder_A/ # 忽略Folder_A下所有文件,仅放开指定共享文件 /Folder_A/* !/Folder_A/File 1a # 放开Folder B的目录权限 !/Folder B/ # 忽略Folder B下所有文件,仅放开指定共享文件 /Folder B/* !/Folder B/File 2b # 保留.gitignore文件本身 !.gitignore
- 执行
git add .,此时Git只会加入File 1a、File 2b和.gitignore三个文件,其余文件自动被忽略 - 提交变更:
git commit -m "初始化共享文件" - 关联远端仓库:
git remote add origin <远端仓库地址> - 推送到远端主分支:
git push -u origin main(若分支名为master则替换为master)
3. 你朋友的本地配置操作
无需修改他本地原有目录命名、不会改动他独有的Folder C等内容,通过目录映射适配结构差异:
- 进入他本地的Root目录,执行
git init初始化本地仓库 - 关联远端仓库:
git remote add origin <远端仓库地址> - 拉取远端已提交的内容:
git pull origin main - 把拉取生成的
Folder B目录下的File 2b移动到他本地命名不同的对应目录中,删除空的自动生成的Folder B目录 - 创建软链接做目录映射:
- Windows系统执行:
mklink /D "Folder B" "他本地对应Folder B的实际目录名" - macOS/Linux系统执行:
ln -s "他本地对应Folder B的实际目录名" "Folder B"
该操作只会创建一个指向原有目录的快捷访问,不会修改原有目录结构和文件
- Windows系统执行:
- 编辑他本地的
.gitignore文件,在你端使用的规则基础上,新增独有内容的忽略规则:
# 原有规则和你端保持一致 /* !/Folder_A/ /Folder_A/* !/Folder_A/File 1a !/Folder B/ /Folder B/* !/Folder B/File 2b !.gitignore # 新增忽略他本地独有的内容 /Folder C/
- 执行
git status测试,仅会展示两个共享文件的变更,其余内容全部被忽略,不会影响他本地原有文件
后续协作注意事项
- 若后续新增需要共享的文件,只需要在两端的
.gitignore中对应添加!/目录路径/文件名的放行规则即可 - 提交前执行
git status确认仅包含需要共享的文件变更,不要使用git add -f强制提交文件,避免把私有内容推送到远端 - 软链接仅需创建一次,后续所有Git操作都会自动适配目录命名差异
内容的提问来源于stack exchange,提问作者Noah Smith
相关产品推荐
相关产品推荐

