我目前正在尝试为我已经工作了一段时间的项目设置Git。我记得很久以前设置Git但从未出于各种原因使用过它。现在我想使用它我得到一个奇怪的问题,我认为这与旧安装有关。
为了重新开始,我安装了一个新的Ubuntu操作系统,这样就不会有Git安装,我复制了项目(Grails)。然后我导航到目录并运行以下命令:
git init
git remote add origin https://USERNAME@bitbucket.org/USERNAME/APPNAME.git
然后我跑了:
git add .
这是我收到以下错误的地方:
fatal: Not a git repository: /home/user/workspace/App_V3/.git/modules/plugins/grails-spring-security-ui
这个错误很奇怪,因为它甚至不匹配我所在的目录,因为目录如下:
/家庭/用户/工作区/ App_V7 /
我想原来我可能已经在旧操作系统的App_V3文件夹中设置了Git,但不知道为什么它仍然指向该目录,因为我已经运行了下面的代码来重新初始化它:
rm -rf .git
git init
有人可以帮助我,因为它非常令人沮丧:S
提前致谢
答案 0 :(得分:12)
我想原来我可能已经在旧操作系统的App_V3文件夹中设置了Git
这是问题的根源。
最重要的是当最初创建存储库(或更具体地说,引用的子模块)时的git版本。
考虑在vendor/awesome
中有一个子模块的存储库,git在创建子模块时的行为方式是完全不同的。
vendor/awesome/.git
的内容是一个文件夹 - 就像任何git checkout一样,例如结账的文件夹结构如下:
.gitmodules
.git
...
vendor/
awesome
.git
config
HEAD
index
packed-refs
...
移动这种存储库没有问题,因为没有路径存储在任何地方。
1.7.8 moved the location of a submodule's .git folder
使用“git submodule init”填充新的子模块目录时, 子模块的$ GIT_DIR元信息目录是在里面创建的 $ GIT_DIR / modules //超级项目的目录并引用 通过gitfile机制。这是为了使切换成为可能 在具有和没有的超级项目中的提交之间 树中的子模块没有重新克隆。
因此vendor/awesome/.git
不是文件夹,而是具有以下内容的文件:
gitdir: /absolute/path/to/main/repo/.git/modules/vendor/awesome
整个文件夹结构是:
.gitmodules
.git
...
modules
vendor
awesome
config
HEAD
index
packed-refs
...
vendor/
awesome
.git <- a file
.git/modules/vendor/awesome/config
的内容指定工作树的位置:
[core]
...
worktree = /absolute/path/to/main/repo/vendor/awesome
这是一个非常棒的变化 - 但它引入了一个问题,因为绝对路径被用来引用位置。
在version 1.7.10中,修改了子模块中绝对路径的使用
管理由顶级超级项目管理的整个目录 “git submodule”可以移到另一个地方。
现在vendor/awesome/.git
如果使用此版本或更高版本的git生成,则包含:
gitdir: ../../.git/modules/vendor/awesome
.git/modules/vendor/awesome/config
的内容指定工作树的位置:
[core]
...
worktree = ../../../../vendor/awesome
再一次,将这种类型的存储库作为相对于主存储库的路径移动是没有问题的。
使用旧的或新版本的git - 你很好。
如果您不幸在1.7.8或1.7.9中创建的存储库(从问题中的证据似乎就是这种情况)工作和移动存储库 - 那里是2 solutions:
答案 1 :(得分:2)
我将所有文件一次移动到一个新文件夹,然后似乎工作正常:)
感谢您的帮助
答案 2 :(得分:0)
而不是
git init
git remote add origin https://USERNAME@bitbucket.org/USERNAME/APPNAME.git
你应该使用
git clone origin https://USERNAME@bitbucket.org/USERNAME/APPNAME.git .
因为您希望clone现有存储库而不是重新创建它。