2014-01-24 65 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