代码之家  ›  专栏  ›  技术社区  ›  Rob Wilkerson

移动.git目录

  •  2
  • Rob Wilkerson  · 技术社区  · 15 年前

    我有一个在项目学习初期创建的存储库。随着我学到更多,我意识到这会产生问题,因为我想要跟踪的一些文件在编译的源代码中不是必需的。我想做的是创建一个新的“project”父目录,将现有的源目录移到该父目录中,然后将不需要编译的文件迁移到该父目录中。

    git可以吗?既然我想移动文件,我会彻底销毁所有的参考资料吗 .git/ 目录也要升级到父级吗?

    2 回复  |  直到 15 年前
        1
  •  3
  •   Chris Shaffer    15 年前

    一种选择是只在当前存储库中移动内容。

    /.git
    /lib/lib.c
    /lib/lib.h
    /test.c
    /readme.txt
    

    /.git
    /src/lib/lib.c
    /src/lib/lib.h
    /src/test.c
    /readme.txt
    

    另一种选择是git过滤器分支,正如VonC在评论中指出的那样。使用它,我相信您可以构建一个重构的存储库,它不会有移动的提交,文件将始终存在于新的结构中。

        2
  •  1
  •   Jonathan Camenisch    15 年前

    与Chris Shaffer达成一致后,您可以使用以下脚本来完成这些步骤:

    fullpath=`pwd`
    dirname=`basename $fullpath`
    
    if [ ! -d ./.git ]; then
      echo 'Working directory contains no .git repository. There is nothing to move.'
    elif [ -d ../.git ]; then
      echo 'Parent directory already contains a .git repository. Aborting.'
    elif [ -d $dirname ]; then
      echo "There's already a $dirname directory. Aborting to be safe."
    
    else  # Enough checking; let's get some work done...
    
      mkdir $dirname
      shopt -s extglob
      for file in `ls -a | egrep -v [.]git\|^[.]+\$\|^$dirname\$`; do
        git mv $file $dirname/
      done
      mv .git* ..
      mv $dirname/* .
      mv html/.[a-z]* .
      git commit -m "Moved Git repository up one directory"
      rmdir $dirname
    
    fi
    

    显然其他人已经能够 mv .git .. ,但这对我不起作用。我得先表演所有的节目 git mv file 操作,然后把所有的东西往上移动。

    如果我以后让它更强大,我会在 https://github.com/jcamenisch/dotfiles/blob/master/bin/mv-git-up .

    推荐文章