Jon*_*Day 9 windows git filenames
当我使用msysgit克隆repo时,文件名中包含空格的所有文件都不会被删除,然后在状态中显示为已删除.
文件名看起来像这样:styles-ie (1:12:11 6:02 PM).css
所以它实际上可能是冒号或括号?
如何获取这些文件以使我的本地repo与原点内联?
RJL*_*ers 11
好消息。 从技术上讲,“如何克隆文件名中带有冒号的文件”的答案是简单地使用“git clone”。幸运的是,只有在 Windows 上(甚至在 msysgit 下)失败的结帐,并且有一个相当干净的解决方法如下所示。
TL; 博士
在 Git Bash 中...
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 .
Run Code Online (Sandbox Code Playgroud)
... 进而
要深入了解上面列出的几个步骤,请继续阅读......
在使用带有各种文件名的冒号的 repo 时,我能够解决这个问题。以下对我有用:
$ git clone https://github.com/wdawson/dropwizard-auth-example.git
您应该会看到以下错误,指出克隆成功,但结帐失败。
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 :/'
Run Code Online (Sandbox Code Playgroud)
cd dropwizard-auth-example
ls
$ git status
输出...
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
...
Run Code Online (Sandbox Code Playgroud)
$ git ls-tree -r master --name-only | grep -v ":" | xargs git reset HEAD
输出...
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
...
Run Code Online (Sandbox Code Playgroud)
$ git status
输出...
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
Run Code Online (Sandbox Code Playgroud)
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
从工作目录中删除有问题的文件后...
PS:以上所有内容都是在 Windows 10 上的 GitBash 中使用 git 版本 2.25.1.windows.1 完成的。可以使用 Windows 上的 TortoiseGit 通过 GUI 完成类似的步骤。
man*_*lds 10
如果你尝试做:
touch "styles-ie (1:12:11 6:02 PM).css"
Run Code Online (Sandbox Code Playgroud)
您将看到无法在Windows上创建它.
基本上,repo有文件(blob和树条目)但你不能在Windows上签出,因为git将无法创建这样的文件.没有其他办法,只能更改文件名.