/ tools / set-submodules-to-github.sh
set-submodules-to-github.sh
 1  #!/usr/bin/env bash
 2  #
 3  # Explicitly switches the relative submodules locations on GitHub to the original public URLs
 4  #
 5  #       '../../group/repo.git' to 'https://github.com/group/repo.git'
 6  #
 7  # This can be useful for non-GitHub forks to automate getting of right submodules sources.
 8  #
 9  
10  #
11  # It makes sense to do
12  #
13  #       git submodule deinit --force .
14  #       git submodule init
15  #
16  # before running this, and
17  #
18  #       git submodule update --recursive
19  #
20  # after that. These were not included over this script deliberately, to use the script flexibly
21  #
22  
23  set -o errexit
24  set -o pipefail
25  set -o nounset
26  
27  DEBUG_SHELL=${DEBUG_SHELL:-"0"}
28  [ "${DEBUG_SHELL}" = "1" ] && set -x
29  
30  ### '../../' relative locations
31  
32  for LINE in $(git config -f .gitmodules --list | grep "\.url=../../[^.]")
33  do
34      SUBPATH=$(echo "${LINE}" | sed "s|^submodule\.\([^.]*\)\.url.*$|\1|")
35      LOCATION=$(echo "${LINE}" | sed 's|.*\.url=\.\./\.\./\(.*\)$|\1|')
36      SUBURL="https://github.com/$LOCATION"
37  
38      git config submodule."${SUBPATH}".url "${SUBURL}"
39  done
40  
41  git config --get-regexp '^submodule\..*\.url$'