考虑到许多分支,我想要一个文件层次结构,我可以在IDE中浏览它,显示与分支相关联的文件和文件夹。
我可能需要弄清楚一些技巧和难题,例如,是否可以显示已在分支内编辑的文件,但是可以排除其他分支的合并?
根目录结构(基于分支')
[分支]
[BRANCH2]
[店3]
` - [all](符号链接到一个存储桶中的所有文件)
` - [PATH \ SYMLINK](目录路径+符号链接)
` - [PATH \ SYMLINK]
注意:
Git: How do I list only local branches?
git for-each-ref --format='%(refname:short)' refs/heads/
正在制作的剧本
#!/bin/bash
BRANCHDIR='/path/to/where/symlinks/go'
MASTER='master'
CODEDIR='/path/to/sourcecode'
OLDPATH=`pwd`
BRANCHDIRS=`git for-each-ref --format='%(refname:short)' refs/heads/ | xargs echo`
for i in $BRANCHDIRS;
do
BRANCHFILES=`git diff --name-only $i $MASTER`
mkdir -p $BRANCHDIR/$i $BRANCHDIR/$i/all
for j in $BRANCHFILES;
do
mkdir -p $BRANCHDIR/$i/$(dirname $j)
ln -s $CODEDIR/$j $(basename $j) -t $BRANCHDIR/$i/$(dirname $j)
ln -s $CODEDIR/$j $(basename $j) -t $BRANCHDIR/$i/all/$(basename $j)
done
done
cd $OLDPATH
答案 0 :(得分:2)
您应该使用git-new-workdir,它适用于大多数git发行版 - 请参阅链接。
git-new-workdir脚本将创建一个功能齐全的符号链接仓库,您可以选择在单个分支上工作。对N个分支重复N次。
建议首先手动使用脚本,但如果您想要使用现有的仓库,则可以按以下方式自动执行:
SYM_TREE_DIR=/tmp/my_git_branches
REPO=/path/to/my/repo/to/clone
mkdir -p $SYM_TREE_DIR
cd $REPO
git for-each-ref --format="%(refname)" refs/heads | \
while read entry
do
# extract just the leaf branch name for simplicity
# (remove the first 11 characters that correspond to "refs/heads/")
BRANCH=${entry:11}
# attempt to clone the repo into the SYM_TREE_DIR
if ../git-new-workdir . $SYM_TREE_DIR/$BRANCH $BRANCH &> /dev/null
then
echo Successfully created linked repo $BRANCH at $SYM_TREE_DIR/$BRANCH
else
echo Failed to create linked repo $BRANCH at $SYM_TREE_DIR/$BRANCH
fi
done