从Git分支创建符号链接文件层次结构

3
给定一个分支数,我希望有一个文件层次结构,可以在我的IDE中浏览与该分支相关联的文件和文件夹。
可能有一些技巧和陷阱需要我去解决,例如,是否可能显示已在分支内编辑的文件,但排除其他分支的合并?
根目录结构(基于分支)
[分支]
[分支2]
[分支3]
`--[全部](符号链接到一个桶中的所有文件)
`--[PATH\SYMLINK](目录路径+符号链接)
`--[PATH\SYMLINK]
注意: Git:如何仅列出本地分支?
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
1个回答

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

谢谢!那真的很酷。手动使用很有意义,而且效果非常好。 - Justin
git-new-workdir已被git-worktree替代,请参见:http://nuclearsquid.com/writings/git-new-workdir/ - Roberto

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接