0

不确定我做错了什么或误解了 git 中的一个特殊性,我有一个可以正常工作的本地存储库,但是当我使用将一些内容从外部复制到存储库中时

cp ..\folder\ -Recurse

然后只有新文件夹显示为 'tracked',而不是该文件夹内的文件,尽管文件位于 repo 内的文件夹中;

只有当我这样做时,所有文件才会被“跟踪”

cp ..\folder\* -Recurse

我错过了什么?

我正在使用 Windows 10 (20H2)、Windows Terminal (1.4.3243.0)、PowerShell 7.1.0 和 git 版本 2.28.0.windows.1


要重现它,请执行以下操作:

mkdir test_git
cd .\test_git\
mkdir from
new-item .\from\test1.txt .\from\test2.txt .\from\test3.txt

mkdir  git1,git2

cd git1
git init -b main
cp ..\from\ -Recurse .
ls .\from\ # show the 3 files in the folder
git status

>On branch main
>
>No commits yet
>
>Untracked files:   
>  (use "git add <file>..." to include in what will be committed)
>        from/
>
>nothing added to commit but untracked files present (use "git add" to track)

现在,第二种情况:

cd ..\git2\
git init -b main
cp ..\from\* -Recurse .
ls .\from\ # show the 3 files in the folder as well
git status

>On branch main
>
>No commits yet
>
>Untracked files:
>  (use "git add <file>..." to include in what will be committed)
>        test1.txt
>        test2.txt
>        test3.txt
>
>nothing added to commit but untracked files present (use "git add" to track)
4

1 回答 1

-2

从存储库外部复制文件不会使它们被跟踪;这使他们无法追踪。如果一个目录下什么都没有被跟踪,那么 git 只报告未跟踪列表中的目录。但是,如果您git add在目录中有一个文件,则该文件将显示为“新文件”,而其他单个文件将显示为“未跟踪”。(如果目录包含仍未跟踪的子目录,则不会列出它们的内容,与以前一样;只显示未跟踪的目录。) OTOH 如果您git add是目录(或其所有内容),那么所有单个文件将显示为暂存的“新文件”。

无论您使用什么命令进行复制,以上所有内容都是正确的。也就是说,你说cp -R /some/source/directoryvs没有区别cp -R /some/source/directory/*。(它可能会改变复制哪些文件 - 这是外壳扩展通配符的问题。但它不会对git行为方式产生影响。)

所以问题是为什么你的观察与 git 的行为方式不一致。

由于您的“如何重现”示例使用标准环境中不存在的命令,并且您的cp语法在标准环境中也不起作用,我猜您是在记忆中工作并且记错了东西。也有可能您实际上有一个非标准环境,其行为方式在这里没有人能够预测。

于 2020-12-01T18:08:24.207 回答