Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Git 如何跟踪未跟踪的内容?_Git_Git Submodules - Fatal编程技术网

Git 如何跟踪未跟踪的内容?

Git 如何跟踪未跟踪的内容?,git,git-submodules,Git,Git Submodules,我最初的问题见下面的实线 我的本地目录中有一个未跟踪的文件夹。当我运行git status时,我得到: Changed but not updated: modified: vendor/plugins/open_flash_chart_2 (modified content, untracked content) 当我键入git add vendor/plugins/open\u flash\u chart\u 2然后再次尝试git status时,它仍然显示未跟踪。发生什么事了 以下

我最初的问题见下面的实线

我的本地目录中有一个未跟踪的文件夹。当我运行
git status
时,我得到:

Changed but not updated:
modified:   vendor/plugins/open_flash_chart_2 (modified content, untracked content)
当我键入
git add vendor/plugins/open\u flash\u chart\u 2
然后再次尝试
git status
时,它仍然显示未跟踪。发生什么事了


以下是我最近半个小时的简单总结:

  • 发现我的Github repo没有跟踪我的
    供应商/插件/open\u flash\u chart\u 2
    插件。具体来说,没有内容,并且在文件夹图标上显示一个绿色箭头

  • 已尝试
    git子模块init

    No submodule mapping found in .gitmodules for path 'vendor/plugins/open_flash_chart_2'
    
  • 尝试
    git子模块添加git://github.com/korin/open_flash_chart_2_plugin.git 供应商/插件/打开\u闪存\u图表\u 2

    vendor/plugins/open_flash_chart_2 already exists in the index
    
  • git状态

    modified: vendor/plugins/open_flash_chart_2 (untracked content)
    
  • 在我的存储库/本地目录中查找名为
    .gitmodules
    的任何文件,但找不到

为了让我的子模块正常工作,git可以开始正常跟踪,我必须做些什么


这可能是不相关的(我包括它以防有用),但每次我键入
git commit-a
而不是我通常的
git commit-m“我的评论”
,它都会抛出一个错误:

E325: ATTENTION
Found a swap file by the name ".git\.COMMIT-EDITMSG.swp"
         dated: Thu Nov 11 19:45:05 2010
     file name: c:/san/project/.git/COMMIT_EDITMSG
      modified: YES
     user name: San   host name: San-PC
    process ID: 4268
While opening file ".git\COMMIT_EDITMSG"
         dated: Thu Nov 11 20:56:09 2010
  NEWER than swap file!  
Swap file ".git\.COMMIT_EDITMSG.swp" already exists!
[O]pen Read-Only, (E)dit anyway, (R)ecover, (D)elete it, (Q)uit, (A)bort:
Swap file ".git\.COMMIT_EDITMSG.swp" already exists!
[O]pen Read-Only, (E)dit anyway, (R)ecover, (D)elete it, (Q)uit, (A)bort:
我是Github的一名完全的新手,尽管我试图浏览文档,但我还是有点被这些特殊的问题难住了。谢谢。


我认为你们应该阅读这篇文章来了解一下子模块。它写得很好,读起来也不花太多时间。

您添加了
供应商/插件/open\u flash\u chart\u 2
作为“gitlink”条目,但从未将其定义为子模块。实际上,您使用的是git子模块使用的内部功能(gitlink条目),而不是子模块功能本身

你可能做过这样的事情:

git clone git://github.com/korin/open_flash_chart_2_plugin.git vendor/plugins/open_flash_chart_2
git add vendor/plugins/open_flash_chart_2
[submodule "vendor/plugins/open_flash_chart_2"]
    path = vendor/plugins/open_flash_chart_2
    url = git://github.com/korin/open_flash_chart_2_plugin.git vendor/plugins/open_flash_chart_2
最后一个命令就是问题所在。目录
vendor/plugins/open\u flash\u chart\u 2
最初是一个独立的Git存储库。通常会忽略这些子存储库,但如果您让git add显式添加它,那么它将创建一个gitlink条目,指向子存储库的头提交,而不是添加目录的内容。如果GitAdd拒绝创建这样的“半子模块”,那就太好了

普通目录在Git中表示为树对象;树对象为其包含的对象(通常分别为其他树对象和blob对象目录和文件)提供名称和权限。子模块表示为“gitlink”条目;gitlink条目只包含子模块的头提交的对象名(哈希)。gitlink提交的“源存储库”在
.gitmodules
文件中指定(以及子模块初始化后的
.git/config
文件)

您拥有的是一个指向特定提交的条目,而不记录该提交的源存储库。您可以通过将gitlink设置为适当的子模块,或者删除gitlink并将其替换为“普通”内容(普通文件和目录)来修复此问题

将其转换为适当的子模块 要正确地将
供应商/插件/open\u flash\u chart\u 2
定义为子模块,唯一缺少的是
.gitmodules
文件。通常(如果您尚未将其添加为裸gitlink条目),您只需使用
git子模块add

git submodule add git://github.com/korin/open_flash_chart_2_plugin.git vendor/plugins/open_flash_chart_2
正如您所发现的,如果路径已经存在于索引中,那么这将不起作用。解决方案是临时从索引中删除gitlink条目,然后添加子模块:

git rm --cached vendor/plugins/open_flash_chart_2
git submodule add git://github.com/korin/open_flash_chart_2_plugin.git vendor/plugins/open_flash_chart_2
这将使用您现有的子存储库(即,它不会重新克隆源存储库),并生成一个类似以下内容的
.gitmodules
文件:

git clone git://github.com/korin/open_flash_chart_2_plugin.git vendor/plugins/open_flash_chart_2
git add vendor/plugins/open_flash_chart_2
[submodule "vendor/plugins/open_flash_chart_2"]
    path = vendor/plugins/open_flash_chart_2
    url = git://github.com/korin/open_flash_chart_2_plugin.git vendor/plugins/open_flash_chart_2
它还将在主存储库的
.git/config
中创建类似的条目(不带
路径设置)

提交它,您将拥有一个适当的子模块。当您克隆存储库(或推送到GitHub并从那里克隆)时,您应该能够通过
git submodule update--init
重新初始化子模块

将其替换为普通内容 下一步假设
供应商/plugins/open_flash_chart_2
中的子存储库没有任何要保存的本地历史记录(即,您只关心子存储库的当前工作树,而不是历史记录)

<强>如果在您所关心的子库中有本地历史记录,那么您应该备份子库的<代码> .git < /COD>目录,然后在下面的第二个命令中删除它。< /强>(也考虑下面的Git子树示例,它保存子库的头部的历史)。 这次添加目录时,它不是子存储库,因此文件将正常添加。不幸的是,由于我们删除了

.git
目录,因此没有一种超级简单的方法可以使源存储库保持最新

<>你可以考虑用A代替。这样做可以让您轻松地从源存储库中引入更改,同时保持存储库中的文件“扁平”(无子模块)。第三方是子树合并功能的良好包装

git rm --cached vendor/plugins/open_flash_chart_2
git commit -m'converting to subtree; please stand by'
mv vendor/plugins/open_flash_chart_2 ../ofc2.local
git subtree add --prefix=vendor/plugins/open_flash_chart_2 ../ofc2.local HEAD
#rm -rf ../ofc2.local # if HEAD was the only tip with local history
后来:

git remote add ofc2 git://github.com/korin/open_flash_chart_2_plugin.git
git subtree pull --prefix=vendor/plugins/open_flash_chart_2 ofc2 master

git subtree push --prefix=vendor/plugins/open_flash_chart_2 git@github.com:me/my_ofc2_fork.git changes_for_pull_request

git子树还有一个
--squash
选项,可以避免将源存储库的历史记录合并到历史记录中,但仍然可以引入上游更改。

我也遇到了同样的问题。原因是有一个子文件夹包含“.git”文件夹。删除它让git很高兴。

也有同样的问题,但在本次讨论中没有解决

我还遇到了线程打开中描述的子模块问题

% git status          
# On branch master
# Changes not staged for commit:
#   modified:   bundle/taglist (untracked content)
查看差异,我识别出一个-dirty附加到散列中: 再次阅读文档,为我解决了问题。 请参阅“子模块陷阱”一节

原因是,有变化
#!/bin/bash

# Read all submodules in current git
MODULES=`git ls-files --stage | grep 160000`

# Iterate through every submodule path
while read -r MOD; do
  # extract submodule path (split line at whitespace and take string with index 3)
  ARRIN=(${MOD})
  MODPATH=${ARRIN[3]}

  # grep module url from .git file in submodule path
  MODURL=`grep "url = " $MODPATH/.git/config`
  MODURL=${MODURL##*=}

  # echo path and url for information
  echo $MODPATH
  echo $MODURL

  # remove existing entry in submodule index
  git rm --cached $MODPATH
  # add new entry in submodule index
  git submodule add $MODURL $MODPATH
done <<< "$MODULES"
Changed but not updated:
modified:   vendor/plugins/open_flash_chart_2 (modified content, untracked content)
find . -name ".git"
git rm --cached vendor/plugins/open_flash_chart_2  
git add .  
git commit -m "Message"  
git push -u origin master  

git status