是否可以在非空目录中初始化一个新的 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/