Git - 创建存储库并仅跟踪新文件

标签 git

是否可以在非空目录中初始化一个新的 git 存储库,并仅跟踪初始化后新添加的文件/文件夹,而忽略旧的文件/文件夹。例如:

初始化新存储库之前的当前文件夹结构:

FolderA/
FolderB/
file1.php
file2.php

初始化新存储库并创建新文件和目录后:

FolderA/  // old, ignore
FolderB/  // old, ignore
FolderC/  // new, track
file1.php  // old, ignore
file2.php  // old, ignore
file3.php  // new, track

最佳答案

Git 只会跟踪您使用 git add 明确告诉它的文件。因此,您无需执行任何操作:只需不要告诉 Git 跟踪您不希望它跟踪的文件即可。

如果您查看git status,这可能会很烦人,它会列出所有未跟踪的文件。

对此也有一个简单的解决方案:只需忽略所有文件即可:

echo '*' > .gitignore

这将告诉 Git 忽略所有文件。您仍然可以使用 git add -f 将单个文件添加到存储库(需要 -f 来强制 Git 忽略文件被忽略的事实)。

如果你想使用git add .git add somedirectory添加所有新文件,那么你需要在中单独列出所有要忽略的文件>.gitignore。您可以使用我上面描述的“烦人”的事实,即 git status 将列出所有未跟踪的文件:

git status --porcelain -uall | grep -E '^\?\? ' | cut -d ' ' -f2- > .gitignore

--porcelain 指定 git status 的输出格式为“Porcelain v1”格式。 Porcelain 输出格式保证永远不会改变,并且被设计为易于机器解析,这与短或长输出格式不同,短或长输出格式被设计为人类可读,因此可能会改变以使其成为可能。更容易阅读。 -uall 告诉git status列出所有未跟踪的文件,否则如果目录中的所有文件都未跟踪,它只会列出目录名称。

grep 查找以 ?? 开头的行,这就是列出未跟踪文件的方式。然后,cut 会剪切 ??(即文件名)之后的所有内容。

注意:这会破坏名为 abc\n?? 的文件例如,def.txt。如果您有此类文件,则需要通过例如以下方式强化命令:对 git status 使用 -z 标志,打印由 ASCII NUL 而不是换行符分隔的记录。

关于Git - 创建存储库并仅跟踪新文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51906009/

相关文章:

linux - 无法获取 git ls-remote 列表并且标准输出没有错误

git - 如何让 -p 成为 git stash show 的默认设置?

git - 检查 git 标签是否是某个父项或子项

git - 当我将新提交推送到 gerrit 时,如何从命令行设置主题?

git - 如果我是一个孤独的开发者,我有什么理由应该在 Git 的一个分支之外工作吗?

pull 请求的 git-blame

Git - 将更改从克隆 pull 回主服务器

git - 致命的 : unable to access cannot resolve host gitlab error when using HTTPS git repository

Azure DevOps 中的 git hook 脚本

git - 我的 git 分支怎么忘记了它的父分支?