On 01/03/2014 02:44 AM, David C. Rankin wrote: > Slavek, all > > After fixing the 3.5.13 source trees I had with: > > git checkout v3.5.13-sru && git pull --rebase > > I have missing dependencies. (basically all submodules that did not have a > v3.5.13-sru branch were wiped out) Example: > > On the 3.5.13 tree: > > 02:04 phoinix:/dat_f/tde/tde> l1 main/dependencies/ > arts > avahi-tqt > dbus-1-tqt > dbus-tqt > qt3 > tqtinterface > > On R14: > > 02:14 phoinix:/dat_e/tde/tde> l1 main/dependencies/ > arts > avahi-tqt > dbus-1-tqt > dbus-tqt > libart-lgpl > libcaldav > libcarddav > python-tqt > qt3 > sip4-tqt > tqca > tqca-tls > tqscintilla > tqt3 > tqtinterface > > So basically libart-lgpl, libcaldav, libcarddav, python-tqt, sip4-tqt, tqca, > tqca-tls, and tqscintilla were all dropped from the tree. (I'm sure I'm missing > others under applications/ as well. > > How do I pull all the remaining R14 sources/sub-modules into my new 3.5.13 > tree? Do I have to do a manual diff of the directory structures and then do a > manual "git checkout master -- <missing>" for each missing dir --or-- is there a > better way to do it? The only other way I can think of would be to do a full git > checkout master and covert the entire tree to master and then come back and > switch submodules that have v3.5.13-sru branches back? > > How do you suggest I fill in the 3.5.13 tree? > I think the problem is this: 16:27 phoinix:/dat_f/tde/tde> git checkout v3.5.13-sru -- scripts 16:27 phoinix:/dat_f/tde/tde/scripts> git branch -l experimental master * v3.5.13-sru 16:28 phoinix:/dat_f/tde/tde> git submodule init -- scripts 16:28 phoinix:/dat_f/tde/tde> git submodule update -- scripts Submodule path 'scripts': checked out '47fb38fad730f4fdfc21e6a89dea1c7a63bb0b71' 16:29 phoinix:/dat_f/tde/tde/scripts> git branch -l * (detached from 47fb38f) master v3.5.13-sru If you ever run submodule update without immediately issuing a "git checkout <branch>" you will *detach* the submodule: (from man git-submodule) <quote> update Update the registered submodules, i.e. clone missing submodules and checkout the commit specified in the index of the containing repository. This will make the submodules HEAD be detached unless --rebase or --merge is specified or the key submodule.$name.update is set to rebase, merge or none. none can be overridden by specifying --checkout. Setting the key submodule.$name.update to !command will cause command to be run. command can be any arbitrary shell command that takes a single argument, namely the sha1 to update to. </quote> The switch_all_submodules_to_head_and_clean script is the problem. When you issue: git submodule update git submodule foreach "git checkout $branch && $THISSCRIPT $gituser" it *ONLY* does 'foreach' for modules within the current branch. If the current toplevel branch is 'v3.5.13-sru' then all submodules that do NOT have a 'v3.5.13-sru' branch are not included in the foreach loop and are left *detached*. For example issuing: git submodule foreach "git branch -r" Does not list "main/dependencies/tqscintilla" because there is no v3.5.13-sru branch. Checking the status of main/dependencies/tqscintilla shows: 16:56 phoinix:/dat_f/tde/tde/main/dependencies/tqscintilla> git branch -l * (detached from 4285f9d) master So git is very unhappy with the tree. Is there an easier way to fix this other than looping through all directories and doing an if git branch -r | grep -q sru; then git checkout v3.5.13-sru && git pull; else git checkout master && git pull; fi ?? -- David C. Rankin, J.D.,P.E.