首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何克隆文件名中带有冒号的文件

如何克隆文件名中带有冒号的文件
EN

Stack Overflow用户
提问于 2011-05-13 20:26:57
回答 4查看 9.4K关注 0票数 21

当我使用msysgit克隆存储库时,文件名中包含空格的所有文件都不会关闭,然后在状态中显示为已删除。

文件名看起来像这样:styles-ie (1:12:11 6:02 PM).css,那么它实际上可能是冒号或括号?

如何获取这些文件以使我的本地存储库与源文件保持一致?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-05-13 21:51:49

如果您尝试执行以下操作:

代码语言:javascript
复制
touch "styles-ie (1:12:11 6:02 PM).css"

您将看到不能在Windows上创建它。

基本上,存储库有文件( blob和树条目),但您不能在Windows上签出,因为git无法创建这样的文件。除了更改文件名之外,没有其他方法。

票数 12
EN

Stack Overflow用户

发布于 2020-03-20 08:57:39

从技术上讲,“如何克隆文件名中带有冒号的文件”的答案是简单地使用“”。幸运的是,只有签出在Windows上失败(即使在msysgit下也是如此),下面显示了一个相当干净的解决方法。

TL;DR

在Git Bash..。

代码语言:javascript
复制
git clone {repo URL}
cd {repo dir}
git ls-tree -r master --name-only | grep -v ":" | xargs git reset HEAD
git commit -m "deleting all files with a colon in the name"
git restore .

..。然后

  • 下载整个git存储库的Zip
  • 重命名包含冒号的文件Zip (不解压)
  • 仅解压缩您重命名的文件
  • 将重命名的文件添加到您的工作目录

<代码>F214

要深入了解上面列出的几个步骤,请继续阅读....

我能够在使用带有不同文件名冒号的存储库时解决这个问题。下面的方法对我很有效:

  • 执行常规git克隆。

$ git clone https://github.com/wdawson/dropwizard-auth-example.git

您应该会看到以下错误,说明克隆成功,但签出失败。

代码语言:javascript
复制
Cloning into 'dropwizard-auth-example'...
remote: Enumerating objects: 322, done.
remote: Total 322 (delta 0), reused 0 (delta 0), pack-reused 322
Receiving objects: 100% (322/322), 15.00 MiB | 2.88 MiB/s, done.
Resolving deltas: 100% (72/72), done.
error: invalid path 'src/test/resources/revoker/example-ca/certs/root.localhost:9000.cert.pem'
fatal: unable to checkout working tree
warning: Clone succeeded, but checkout failed.
You can inspect what was checked out with 'git status'
and retry with 'git restore --source=HEAD :/'

  • 将目录切换到新克隆的存储库

cd dropwizard-auth-example

  • 检查git存储库工作目录是否完全为空

ls

  • 运行git-

以查找要删除的所有文件

$ git status

输出...

代码语言:javascript
复制
On branch master
Your branch is up to date with 'origin/master'.

Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
        deleted:    .gitignore
        deleted:    .travis.yml
        deleted:    LICENSE
        deleted:    NOTICE
        deleted:    README.md
        deleted:    conf.yml
...

  • 仅还原文件名中不包含冒号的文件的分段删除。

$ git ls-tree -r master --name-only | grep -v ":" | xargs git reset HEAD

输出...

代码语言:javascript
复制
Unstaged changes after reset:
D       .gitignore
D       .travis.yml
D       LICENSE
D       NOTICE
D       README.md
D       conf.yml
D       java-cacerts.jks
D       pom.xml
D       src/main/java/wdawson/samples/dropwizard/UserInfoApplication.java
D       src/main/java/wdawson/samples/dropwizard/api/UserInfo.java
D       src/main/java/wdawson/samples/dropwizard/auth/OAuth2Authenticator.java
D       src/main/java/wdawson/samples/dropwizard/auth/OAuth2Authorizer.java
D       src/main/java/wdawson/samples/dropwizard/auth/Role.java
...

  • 再次运行git status,查看现在是否只暂存文件名中包含冒号的文件以供删除。所有其他文件仍显示为已删除,但不暂存以进行提交。这就是我们现阶段想要的。

$ git status

输出...

代码语言:javascript
复制
On branch master
Your branch is up to date with 'origin/master'.

Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
        deleted:    src/test/resources/revoker/example-ca/certs/root.localhost:9000.cert.pem
        deleted:    src/test/resources/revoker/example-ca/csr/root.localhost:9000.csr.pem
        deleted:    src/test/resources/revoker/example-ca/intermediate/certs/intermediate.localhost:9000.cert.pem
        deleted:    src/test/resources/revoker/example-ca/intermediate/csr/intermediate.localhost:9000.csr.pem
        deleted:    src/test/resources/revoker/example-ca/intermediate/private/intermediate.localhost:9000.key.pem
        deleted:    src/test/resources/revoker/example-ca/private/root.localhost:9000.key.pem

Changes not staged for commit:
  (use "git add/rm <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
        deleted:    .gitignore
        deleted:    .travis.yml
        deleted:    LICENSE
        deleted:    NOTICE
        deleted:    README.md
        deleted:    conf.yml
        deleted:    java-cacerts.jks
        deleted:    pom.xml

  • 提交所有暂存文件。也就是说,提交删除文件名中包含冒号的所有文件。

git commit -m "deleting all files with a colon in the name"

  • 还原工作目录中的所有内容。

$ git restore .

  • 查看所有文件。多漂亮的网站啊。

$ ls

输出...

conf.yml java-cacerts.jks LICENSE NOTICE pom.xml README.md src

一旦您从工作目录中删除了有问题的文件...

  • 下载整个GitHub repo
  • 的Zip在7个Zip中打开它...别拉开拉链。只需打开它进行编辑(重命名文件)
  • 查找名称中带有冒号的文件
  • 使用冒号重命名每个文件用冒号替换冒号无论是什么underscore...or您都可以解压缩那些刚刚重命名的文件
  • 将它们复制到git工作目录

PS:以上所有操作都是在Windows10上使用git版本2.25.1.windows.1在GitBash中完成的。类似的步骤可以在Windows上使用TortoiseGit通过图形用户界面完成。

票数 11
EN

Stack Overflow用户

发布于 2016-06-30 23:05:47

您可以在linux环境中克隆存储库,将其压缩并复制到windows,然后在windows上使用7zip等工具将其解压。7zip将用下划线替换冒号,并保留所有git信息。只要该文件不发生更改,您就可以在一段时间内完成所有工作。这些文件通常不会有太多变化(例如,我有一个中间有冒号的cert文件)。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5991805

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档