2014-01-24 46 views
3

假设有多个分支,我想要一个文件层次结构,我可以在我的IDE中浏览该文件,以显示与分支关联的文件和文件夹。从git分支创建符号链接文件层次结构

可能有一些技巧和难题我必须弄清楚,例如,是否可以显示已在分支中编辑过的文件,但排除其他分支的合并? [全部](符号链接到所有 -

(基于分支

[分支]

[BRANCH2]

[店3]

'的根目录结构文件在一个桶中)

` - [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 

回答

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 
+0

谢谢!这真的很酷。手动使用很有意义,效果很好。 – Justin

+0

'git-new-workdir'已被'git-worktree'取代,请参阅:http://nuclearsquid.com/writings/git-new-workdir/ – Roberto