使用git clone命令后,执行status命令会显示未跟踪的文件。

22

抱歉,我是Git的新手(虽然我非常熟悉像cvs和svn这样的旧版源代码管理系统)...

我的最终目标是通过将远程存储库克隆到本地,将文件添加到本地存储库,提交更改,然后将本地存储库推送回远程来向远程存储库(不在我的机器上)添加文件。

我尝试了这个方法:

git clone ssh://user@server/Users/GitRepo/Project.git
<create file locally>
git add <localfile>
git commit -m "Narg"
git push

但是它只说“一切都是最新的”。

所以我尝试逐步进行,结果变得更加困惑了。

git clone ssh://user@server/Users/GitRepo/Project.git
git status

而且它告诉我

# Not currently on any branch
# Untracked files:
  followed by a long list of Untracked files.

这看起来非常奇怪,如果我只是克隆了仓库,为什么文件会被标记为未跟踪?

如果很重要的话,远程仓库是全新的,通过svn2git创建的。

如果我输入

git remote show origin

它告诉我

* remote origin
  Fetch URL: ssh://user@server/Users/GitRepo/Project.git
  Push  URL: ssh://user@server/Users/GitRepo/Project.git
HEAD branch: master
Remote branch:
   master tracked
Local branch configured for 'git pull':
   master merges with remote master
Local ref configured for 'git push':
   master pushed to master (up to date)

如果我输入

git branch -a

它告诉我

* (no branch)
master
remotes/GitRepo/master
remotes/origin/HEAD -> origin/master
remotes/origin/master

那么我只是混淆了吗,一切都正常工作了吗?还是我的git命令有问题?或者是我错误地创建了存储库,所以没有任何git命令会正常工作?

谢谢, 克里斯


2
在执行 git status 命令之前,先运行命令 cd Project.git。该命令需要在 git clone ssh://user@server/Users/GitRepo/Project.git 后执行。 - Litmus
希望 git checkout <branch> 能帮助你。 - tijs
在 git clone 之后,我没有一个名为 Project.git 的目录 - 只有一个名为 Project 的目录,其中包含我的实际文件。所以我得到了一个非裸仓库(对吧?)。我可以 "cd .git",但是从那里运行 "git status" 给我报错 "fatal: This operation must be run in a work tree"。 - Betty Crokker
抱歉,应该是 cd Project。那是个笔误。你是对的,你正在克隆一个非裸仓库。你不需要进入 Project/.git 文件夹。你可以从 Project 文件夹本身运行所有 git 命令。让 git 管理 .git 文件夹。 - Litmus
1
我刚刚也发现了同样的问题。我的主要关注点并不是像下面的答案那样正确地跟踪状态,而是为什么未跟踪的文件会成为仓库的一部分。 - ProfK
显示剩余2条评论
5个回答

15

git config -l

如果当前的Git仓库的core.precomposeunicode=true

请尝试执行以下命令:

git config core.precomposeunicode false

这是为什么:来自这里

core.precomposeunicode 此选项仅由Mac OS实现的Git使用。当core.precomposeunicode=true时,Git会撤消Mac OS对文件名的Unicode分解。当在Mac OS和Linux或Windows之间共享存储库时,这很有用。 (需要Git for Windows 1.7.10或更高版本,或运行在cygwin 1.7下的Git)。 当false时,Git将以完全透明的方式处理文件名,这与旧版本的Git向后兼容。


那就是我遇到的问题。如果可以的话,我会接受这个答案。 - Spidey
谢谢 @i-chou。这个功能非常顺利,解决了我的问题。 - mefahimrahman

5

对于通过Google到达此处的其他人。

我遇到了相同的问题,但我能够推送并且没有收到任何“一切都更新”的消息。
问题在于Windows和Mac OS与Linux不同,它们不区分大小写;但repo是在区分大小写的操作系统上创建的,并且有两个只有大小写字母不同的文件版本。

这里有一个相关问题。


3

Git 是一款很棒的工具,但是如果没有一个好的提交记录地图,很容易就会迷失在提交记录的森林里。

以下是如何获取这张地图(我称之为“gr”表示“图表”,但您也可以根据喜好称之为“地图”):

git config --global alias.gr 'log --graph --full-history --all --color --decorate'

这是 git 的一次性设置。现在无论何时您迷失了方向,只需查看地图:

git gr

你当前所处的位置由单词“HEAD”表示,并列出任何分支名称。

你会发现你目前没有在任何一个分支上,这听起来比实际情况严重得多——实际上并不是什么大问题,只是意味着你的提交不会像你想的那样进入主分支。

所以只需回到你的主分支并在那里提交:

git checkout master
git add yourfile.txt
git commit -m'Narg'
git push

现在看一下git gr,你会发现HEAD与master提交的内容相同,而master与origin/master提交的内容也相同,这意味着你已经准备就绪了。


谢谢!唉,我的 Git 新手问题仍然存在困扰……Git 图表显示最顶部的修订版本是(HEAD、origin/master、origin/HEAD、GitRepo/master、master),我怎么能从中知道我当前没有在任何分支上? - Betty Crokker
如果我从本地存储库的根文件夹中输入“git checkout master”,它会显示“fatal: Unable to create '/Users/blah/blah/.git/index.lock': No space left on device”或“fatal: unable to write new index file”。 - Betty Crokker
“设备上没有剩余空间”听起来像是你的硬盘已经满了?如果你输入df -h,它会显示什么?至于另一个问题,git gr实际上不会告诉你你在哪个分支上,只会告诉你你当前检出的提交以及现有分支指向的提交(分支实际上只是一个指针)。对于你当前的分支,你使用了正确的命令:git branch -a。 - Magnus

2

另一个可能导致此问题的原因是:在github网页界面上创建的文件名称中包含冒号:lost:time.txt


0

对我来说,主要问题在于路径过长 将git配置设置为以下内容,然后进行检出

git config --system core.longpaths true

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