It appears the git subtree pull command may have some problems.

The script below demonstrates the problem as follows:
1) Create a repo with a lib folder
2) Create another repo that uses the lib folder via git subtree push/add - the 
initial operation works as expected
3) Update the original lib folder as follows: modify an existing file and add a 
new file
4) Commit the changes reports "1 file changed, 1 insertion(+)"
5) Use git subtree push/pull - seems to work: returns message "1 file changed, 
1 insertion(+)"
6) The new file is there, but the changed file is not updated

The expected behavior is:
        git subtree pull - would merge both the updated file and the new file

Actual behavior is:
        git subtree pull - adds the new file but does not merge changes to the 
existing file

Have confirmed behavior on both Windows and Ubuntu.

git --version is 2.17.1 in Ubuntu

Here is the full Ubuntu script:
clear
echo Test git subtree

export gitTestRoot="/home/dougc/git-test"
export librepo="$gitTestRoot/librepo"
export uselibrepo="$gitTestRoot/uselibrepo"

echo Clean-up
cd /
rm -rf $gitTestRoot

echo Initialize repos
mkdir $gitTestRoot
mkdir $librepo
cd $librepo
git init
mkdir $uselibrepo
cd $uselibrepo
git init

echo Add files to librepo
cd $librepo
echo Hi >fileInRoot.txt
mkdir lib
cd lib
echo Mom >fileInLib.txt
cd ..
git add fileInRoot.txt
git add lib/fileInLib.txt
git commit -m "Initial files in repo with lib"

echo Add files to uselibrepo
cd $uselibrepo
echo Excellent>file1.txt
git add file1.txt
git commit -m "Initial files in repo that will have lib subtree"

echo Add subtree to uselibrepo
cd $librepo
git subtree push --prefix=lib $uselibrepo libBranch
cd $uselibrepo
git subtree add --prefix=lib $uselibrepo libBranch
git branch -D libBranch

echo Add/change files in lib
cd $librepo/lib
echo Dad >fileInLib.txt
echo Adventure >anotherLib.txt
git add anotherLib.txt
git commit -m "Updates to lib in original location"

echo Share changes
cd $librepo
git subtree push --prefix=lib $uselibrepo libBranch
cd $uselibrepo
git subtree pull --prefix=lib -m "Merging" $uselibrepo libBranch
git branch -D libBranch

echo New file is found in both places
cat $librepo/lib/anotherLib.txt
cat $uselibrepo/lib/anotherLib.txt

echo Changed file is NOT the same in both places
cat $librepo/lib/fileInLib.txt
cat $uselibrepo/lib/fileInLib.txt

Reply via email to