隐藏文件和github存储库的问题

Hen*_*mes 2 git github

我有一个存储在本地和 GitHub 上的存储库,

这个存储库用于存储我网站的内容,

在注册 CMS 并在 GitHub 目录中创建一个隐藏文件后,我改变了主意并想删除隐藏文件。

我表演过

git pull origin master
Run Code Online (Sandbox Code Playgroud)

为了将我的本地文件与 GitHub 上的文件同步,然后我在本地删除了隐藏文件并运行以下命令,希望它将最新文件与我的本地目录同步。

git add *
git commit -m "Removed CMS hidden files"
git push -u origin master
Run Code Online (Sandbox Code Playgroud)

但是,这样做时,我得到以下信息

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

Changes not staged for commit:
    deleted:    .forestry/front_matter/templates/catalogue-entry.yml
    deleted:    .forestry/settings.yml

Untracked files:
    .DS_Store

no changes added to commit
Run Code Online (Sandbox Code Playgroud)

我想要的结果是我在本地与我的 GitHub 目录完全同步,删除了 CMS 添加的隐藏文件。

Huỳ*_*yễn 6

TL; 博士; 使用git add [--all|-A]orgit add [.|-A .]git add -uor git add '*',而不是git add *。其中之一可能有效(用于git status验证哪些有效)


这个答案这个答案

  • git add --all在整个工作树上git add -A 进行所有更改
  • git add -u 阶段修改和删除没有新文件
  • git 版本 1.x 中在整个工作树上git add . 暂存新文件和修改没有删除
  • 从 git 2.0git add . (或git add -A .不过是暂存新的/修改的/删除的文件(所有更改) - 但仅限于当前目录(./目录)
  • 要获得 的旧行为git add .,我们必须使用--ignore-removal

关于git add *,来自另一个答案

  • 在Git中,add **由shell来解释,并没有任何使用Git。如果您的 shell 是 Bash,则以. (Linux 上的隐藏文件)开头的文件和目录将不会与 匹配*,因此它们不会被传递到git add,也不会被添加到索引中。

  • 如果git add *在Windows非bash的解释器中运行时,*但将被逐字传递给git add。在这种情况下,名称以 开头的文件和目录.将被添加

所以行为与 Windows 和 Linux 不同git add *,OP 可能使用了带有 bash shell系统的 Linux/ git,这就是他收到消息的原因:

 Changes not staged for commit:
    deleted:    .forestry/front_matter/templates/catalogue-entry.yml
    deleted:    .forestry/settings.yml
Run Code Online (Sandbox Code Playgroud)

在 did 之后git add *,但因为(使用 bash shell) add *与以..

鼓励你们阅读此答案以获取有关git add *.

结论:取决于情况(您所在的目录,是要删除还是添加或修改等)我上面的建议之一可能会起作用,但git add [--all,-A]恰好是最安全的方法,可以将所有更改包括整个隐藏文件工作树 - 整个存储库