【问题标题】:Not able to add a subfolder to remote repository in Github无法将子文件夹添加到 Github 中的远程存储库
【发布时间】:2016-03-10 05:38:20
【问题描述】:

在我的电脑中有一个文件夹nextdoor,里面有一个子文件夹source。我所有的图像和代码都存在于source 文件夹中,但不知何故我无法将这个特定的子文件夹推送到远程存储库。

远程存储库:LINK

如果你去远程仓库,你可以看到source文件夹没有被添加。子文件夹也不为空。我尝试了很多方法,但不幸的是,我无法将这个特定的子文件夹向上推。

如果我这样做git status

git status
On branch master
Your branch is up-to-date with 'origin/master'.

nothing to commit, working directory clean

子文件夹总数:

bin  include  lib  local  pip-selfcheck.json  README.md  source  static_cdn

既然我能够推送所有文件夹,但为什么source 没有上升?

source 文件夹内:

crytography  manage.py  registration.txt  templates
db.sqlite3   nextdoor   static

.gitignore 文件:

# global gitignore for IDE, etc
# -- should still exclude project specific ignores in .gitignore

# system junk
.netrwhist
.Trash-1000
*.pyc
npm-debug.log

# IDEs
.idea
.env

# private files
id_rsa
*.key

谁能帮帮我?

【问题讨论】:

  • 你确定你的源码目录中没有.gitignore文件吗?
  • 奇怪...您的“源”目录不是符号链接或类似的东西?
  • 我没有通过符号链接理解。我该如何检查?
  • 我克隆了你的仓库;并尝试在源目录中添加一些文件;它也没有工作。我只是通过删除你的 .git 目录并重新初始化它(git init; git add --all)来让它工作......
  • 你玩过子模块吗?您的“源”文件夹看起来像一个子模块,但缺少 .gitmodules

标签: git github subdirectory


【解决方案1】:

您的最后一次提交 (815bb7d) 已损坏。它添加了“半个子模块”。

当使用git submodule add 添加子模块时,会发生两件事:创建一个文件.gitmodules,其中包含您的子模块的 URL,并创建一个“文件夹”,并用您的子模块的提交进行注释。

在您的情况下,您设法创建了一个包含第二个但不是第一个的提交:

$ git ls-tree 815bb7d28719ab66e765ba8e265eb317766b68db
100644 blob 506c8957ac440449d375416f45c6753a3cb65d83    .gitignore
100644 blob 5f8188352aa817edb6808536f598d3ac74d448d7    README.md
040000 tree c336cc94ab9a686360ee9e6f330558cdee571e9d    bin
040000 tree 334b6ff5f7c516042b7a185ec6106208df8495a7    include
040000 tree e65f051d2d0e9f2648a6b83f0ef0836893423ee5    lib
040000 tree 63a79abf5f366fc25b0b47fc527ea237163a0505    local
100644 blob 2dbf660a900d007e70510ff0ccc2c553b32d6120    pip-selfcheck.json
160000 commit 4732e130e321cacd355f8bffbf1c1726e94576c6  source
040000 tree 12edc4bcf6f3ab7a76dc5bda57a940c0caeae7e0    static_cdn

你看,提交对象被存储了,但是对应的.gitmodules文件没有。

您至少有两个选择,要么丢弃损坏的提交 (git reset --hard 815bb7d28719ab66e765ba8e265eb317766b68db^),要么按照 cmets 中的建议删除 .git 目录,完全丢弃整个历史记录。


请注意,不可能永远推送目录。您总是在本地存储库中进行本地提交,然后通过推送本地提交将本地存储库与远程存储库同步。

在您的情况下,您无法将“源”中的文件添加到您的存储库中,因为“源”被视为一个单独的存储库,一个子模块。

【讨论】:

  • 比我的“蛮力”选项更好的解决方案 :) 你有我的投票!
【解决方案2】:

这是最快的,但肯定不是最好的解决方案。您的 git 存储库中似乎有问题。我让它工作的最快方法是销毁你的 git 存储库并重新开始。 警告您将丢失您的历史记录:

rm -rf .git
git init
git add ...

我最好调查一下为什么 git 存储库坏了;正如@michas 建议的那样

【讨论】:

  • @python 它对你有用,但我可以理解反对意见;这不是一个很好的解决方案:您的浴室漏水?让我们拆掉房子,盖个新房子吧:)
  • 修复你的存储库会更好。 ;)
猜你喜欢
  • 2020-10-18
  • 1970-01-01
  • 2021-10-03
  • 2012-02-05
  • 2018-08-28
  • 1970-01-01
  • 2013-12-03
  • 1970-01-01
  • 2020-06-02
相关资源
最近更新 更多