如何在git中使用gitignore命令

167

我第一次使用git,已经将我的分支推送到github,并将所有库和文档都推送到了github上。现在我该怎么做,如何使用gitignore命令避免再次犯同样的错误。


1
.gitignore 是你的 git 根目录中的一个文件。添加要忽略的文件名模式,这些文件将自动被忽略。 - LonelyWebCrawler
我在使用Ubuntu操作系统。请问您能否告诉我Git根目录的路径? - user1559230
2
这是您使用 git init 的目录。.git 目录位于那里。 - LonelyWebCrawler
3
对于不知道如何使用gitignore的人们,请访问https://www.gitignore.io。您可以输入您正在使用的所有工具(例如symfony,CakePHP,ZendFramework,wordpress,grunt,sublime text,netbeans等),它将为您生成gitignore文件。如果您不知道如何使用gitignore,我认为学习的最佳方法是查看一些良好的使用示例(例如由gitignore.io生成的示例)。如果您想要通过命令行使用它(极客方式),请参阅此教程:https://vimeo.com/70609819 - DevWL
8个回答

204

根据您所说,这些文件是库/文档,您不想删除但也不想推送到github。假设您的项目位于文件夹your_project中,并有一个文档目录:your_project/doc

  1. 从项目目录中移除它(而不实际删除它):git rm --cached doc/*
  2. 如果您还没有.gitignore,可以在项目文件夹内创建一个:project/.gitignore
  3. doc/* 添加到 .gitignore 文件中。
  4. 将文件暂存以提交:git add project/.gitignore
  5. 提交: git commit -m "message".
  6. 将更改推送到github

你能告诉我如何编写 .gitignore 文件吗?即在 .gitignore 文件中如何编写要忽略的文件夹和文件的路径。谢谢。 - user1559230
5
嗨,gitignore只是一个纯文本文件。它实际上是.gitignore(点gitignore)文件。只需每行写入您想要Git忽略的文件/文件类型的名称即可。例如:http://www.sujee.net/tech/articles/gitignore/ - u19964
1
请仅返回翻译后的文本:^ http://web.archive.org/web/20120914233504/http://sujee.net/tech/articles/gitignore/ - verbumSapienti

66
如果您没有.gitignore文件,请先使用:

touch .gitignore

然后运行此命令将要忽略的文件路径添加到你的 gitignore 文件中:

```gitignore ```
echo 'application/cache' >> .gitignore

注意换行


4
不需要先“touch”文件。如果文件不存在,“>>”与“>”同义。echo在输出末尾添加一个换行符。您可以使用-n来停止它。如果您需要多个忽略项,请执行多个echo或使用-e,如下所示:echo -e "**/cache/\n**.pyc" >> .gitignore。双星号匹配递归地深入文件夹中的所有文件。在文件夹末尾使用“/”,以防万一。 - mazunki
1
@Andrew 简而言之:使用 echo "file_to_be_ignored" >> .gitignore 将每个被忽略的文件添加到 .gitignore 中,无需进行其他操作。将文件夹名称以 / 结尾,例如 echo "**/modules/" >> .gitignore - mazunki
为什么我的评论被删除了? - Andrew

18

git ignore是git中的一种约定。设置一个名为.gitignore的文件将忽略该目录及更深层次目录中匹配该文件所包含模式的文件。最常见的用法是在顶层只有一个这样的文件,但您可以在目录结构更深的位置添加其他文件来忽略更多的模式或停止忽略它们并逐步向更深的目录结构。

同样地,您可以通过指定以!开头的模式来“取消忽略”更深层次结构或特定子集中的某些文件(例如,您忽略了*.log但仍要跟踪important.log)。例如:

*.log !important.log

这个命令会忽略所有日志文件,但会追踪名为important.log的文件。

如果你正在追踪你想要忽略的文件,可以删除它们,将该模式添加到你的.gitignore文件中,并添加所有更改。

# delete files that should be ignored, or untrack them with 
# git rm --cached <file list or pattern>

# stage all the changes git commit
git add -A 

从现在开始,您的存储库将不再跟踪它们。

如果您想清除历史记录,您可以


(Note: The original text appears to be incomplete, as it ends abruptly after "you can". Please provide the full text to ensure accurate translation.)
# if you want to correct the last 10 commits
git rebase -i --preserve-merges HEAD~10 

然后标记每个提交为eedit。保存计划。现在,Git将重新播放您的历史记录,停止在每个使用e标记的提交处。在这里,您可以删除不想要的文件,git add -A,然后git rebase --continue,直到完成。您的历史记录将变得干净。请确保告诉同事,因为您需要强制推送,并且他们需要重新进行尚未推送的变基操作。


9

在你的git根目录中有一个名为.gitignore的文件。它是一个文件,而不是一个命令。你只需要插入要忽略的文件的名称,它们就会自动被忽略。例如,如果你想忽略所有以~结尾的emacs自动保存文件,那么你可以添加这一行:

*~

如果你想从分支中移除不需要的文件,你可以使用git add -A,它会"移除不再工作树中的文件"。
注意:我所说的"git根目录"只是你第一次使用git init的目录,也是你可以找到.git目录的地方。

我不想要已经推送的文件会发生什么? - user1559230

6
如果您没有.gitignore文件,您可以通过以下方式创建一个新的:
touch .gitignore

您可以通过在.gitignore文件中输入以下命令来排除一个文件夹:

/folderName

将此文件推送到您的git存储库中,这样当新人克隆您的项目时,他不必再次添加相同的文件。

谢谢建议。我们应该放斜杠吗?还有,末尾不需要"/*"吗?这个工作适用于Windows和Linux吗? - Cloud Cho

5

有几种方法可以在git中使用gitignore

  • 通过指定具体的文件名进行忽略。例如,要忽略一个名为readme.txt的文件,只需在.gitignore文件中写入readme.txt。
  • 您还可以写下文件扩展名。例如,要忽略所有的.txt文件,写上*.txt即可。
  • 您也可以忽略整个文件夹。例如,您想忽略名为test的文件夹。然后只需在文件中写入test/。

只需创建一个.gitignore文件并写入您想要忽略的内容即可。 一个样本的gitignore文件可能是:

# NPM packages folder.
node_modules

# Build files
dist/

# lock files
yarn.lock
package-lock.json

# Logs
logs
*.log
npm-debug.log*

# node-waf configuration
.lock-wscript

# Optional npm cache directory
.npm

# Optional REPL history
.node_repl_history

# Jest Coverage
coverage

.history/

你可以在 Git文档 gitignore 中了解更多信息。

1

在我的Mac电脑上,我找到了这个文件.gitignore_global,它在我的主目录下被隐藏了,所以执行ls -altr命令来查看它。

我添加了我想要Git忽略的Eclipse文件。内容如下:

 *~
.DS_Store
.project
.settings
.classpath
.metadata

当我将.gitignore文件放入我的项目文件夹中时,它会在本地破坏我的eclipse项目。你知道为什么会发生这种情况吗?有什么方法可以预防吗?目前我只是避免使用.gitignore文件。 - JesseBoyd
我不再使用Eclipse了。现在用的是IntelliJ。 - j2emanue

0

此链接所述,您可以将“.gitignore”文件添加到项目的根目录中,并在其中添加所有文件或文件夹名称。 (在我的情况下,C#项目忽略了文件和文件夹)

注意:Git默认会忽略此文件。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接