'git add.' 不起作用

use*_*858 5 git repository git-add

我正在尝试为我已经工作了一段时间的项目设置Git.我记得很久以前设置Git但从未出于各种原因使用过它.现在我想使用它我得到一个奇怪的问题,我认为这与旧安装有关.

为了重新开始,我安装了一个新的Ubuntu操作系统,这样就不会有Git安装,我复制了项目(Grails).然后我导航到该目录并运行以下命令:

git init

git remote add origin https://USERNAME@bitbucket.org/USERNAME/APPNAME.git
Run Code Online (Sandbox Code Playgroud)

然后我跑了:

git add .
Run Code Online (Sandbox Code Playgroud)

这是我得到以下错误的地方:

fatal: Not a git repository: /home/user/workspace/App_V3/.git/modules/plugins/grails-spring-security-ui
Run Code Online (Sandbox Code Playgroud)

这个错误很奇怪,因为它甚至不匹配我所在的目录,因为目录如下:

/ home/user中/工作区/ App_V7 /

我想我原本可能在旧操作系统的Ap​​p_V3文件夹中设置了Git,但不知道为什么它仍然指向该目录,因为我已经运行下面的代码重新初始化它:

rm -rf .git
git init
Run Code Online (Sandbox Code Playgroud)

有人可以帮助我,因为它非常令人沮丧:S

提前致谢

AD7*_*six 14

移动具有子模块的存储库是有问题的

我想原来我可能已经在旧操作系统的Ap​​p_V3文件夹中设置了Git

这是问题的根源.

重要的是当最初创建存储库(或更具体地,引用的子模块)时的git版本.

考虑一个包含一个子模块的存储库vendor/awesome,git在创建子模块时的行为方式是完全不同的.

git版本<1.7.8

内容vendor/awesome/.git是一个文件夹 - 就像任何git checkout一样,例如结帐的文件夹结构将是:

.gitmodules
.git
    ...
vendor/
    awesome
        .git
            config
            HEAD
            index
            packed-refs
            ...
Run Code Online (Sandbox Code Playgroud)

移动这种存储库没有问题,因为没有路径存储在任何地方.

git版本1.7.8或1.7.9

1.7.8移动了子模块的.git文件夹的位置

当使用"git submodule init"填充新的子模块目录时,子模块的$ GIT_DIR元信息目录在超级项目的$ GIT_DIR/modules //目录中创建,并通过gitfile机制引用.这样就可以在没有重新克隆的情况下在超级项目中提交和在树中没有子模块的提交之间进行切换.

因此vendor/awesome/.git不是文件夹,它是一个包含以下内容的文件:

gitdir: /absolute/path/to/main/repo/.git/modules/vendor/awesome
Run Code Online (Sandbox Code Playgroud)

整个文件夹结构是:

.gitmodules
.git
    ...
    modules
        vendor
            awesome
                config
                HEAD
                index
                packed-refs
                ...

vendor/
    awesome
        .git <- a file
Run Code Online (Sandbox Code Playgroud)

内容.git/modules/vendor/awesome/config指定工作树的位置:

[core]
   ...
   worktree = /absolute/path/to/main/repo/vendor/awesome
Run Code Online (Sandbox Code Playgroud)

这是一个非常棒的变化 - 但它引入了一个问题,因为绝对路径用于引用位置.

git version> = 1.7.10

1.7.10版中,修改了子模块中绝对路径的使用

容纳由"git submodule"管理的顶级超级项目的整个目录可以移动到另一个地方.

现在,vendor/awesome/.git如果使用此版本或更高版本的git生成,则包含:

gitdir: ../../.git/modules/vendor/awesome
Run Code Online (Sandbox Code Playgroud)

内容.git/modules/vendor/awesome/config指定工作树的位置:

[core]
   ...
   worktree = ../../../../vendor/awesome
Run Code Online (Sandbox Code Playgroud)

再一次,将这种类型的存储库作为相对于主存储库的路径移动是没有问题的.

移动存储库

使用旧的或新版本的git - 你很好.

如果您不幸在1.7.8或1.7.9中创建的存储库(从问题中的证据似乎就是这种情况)开始工作移动存储库 - 有两种解决方案:

  1. 再次克隆
  2. 更正子模块.git文件中的路径,以及相应的工作树配置设置


use*_*858 2

我一次将所有文件移动到一个新文件夹,然后似乎工作正常:)

谢谢您的帮助