事实证明,这个问题提出了同样的问题Detach (move) subdirectory into separate Git repository
我决定学习git并将我的编程作业保存在git repo中。我认为这是一个好主意。现在我想知道一些事情:
我有一个git仓库,每个分配都有一个子目录。我想知道是否有一种理智的方法可以使每个子目录成为自己的git仓库,保留与这些文件相关的历史记录。似乎“git filter-branch --subirectory-filter”是答案的一部分,但我不知道该怎么做。
修改
澄清:我的结构是这样的
superdir .git subdir1 subdir2 subdir3
我希望我的结构更像这样
superdir subdir1 .git subdir2 .git subdir3 .git
我可以这样做吗?
答案 0 :(得分:2)
您可能正在寻找git submodules,但我只是更改您的布局,使顶级不成为git repo,并且只需单独管理子目录。< / p>
答案 1 :(得分:2)
使用如下所示的脚本:
#! /bin/bash
superdir=file:///tmp/superdir
subdirs=(subdir1 subdir2 subdir3)
for dir in ${subdirs[@]}; do
echo "Rewriting $dir..."
git clone --quiet $superdir "$dir" || exit 1
cd "$dir"
# workaround for git-1.6.4.2 on Cygwin 1.7
# otherwise, git-filter-branch complains about a dirty branch
git reset --hard -q
git filter-branch --subdirectory-filter "$dir" HEAD >/dev/null
git reflog expire --expire=0 --all
git gc --quiet --prune=0
cd ..
done
从结构为
的superdir repo开始$ ls -a . * .: . .. .git subdir1 subdir2 subdir3 subdir1: . .. file1 subdir2: . .. file2 subdir3: . .. file3
结果是
$ ls -a . * .: . .. subdir1 subdir2 subdir3 subdir1: . .. .git file1 subdir2: . .. .git file2 subdir3: . .. .git file3
答案 2 :(得分:1)
为什么不将每个类放在它自己的repo中,并将每个赋值放在它自己的分支上?回顾我的大学课程,这就是我组织事情的方式。