相关疑难解决方法(0)

我为什么要在Git中使用core.autocrlf = true?

我有一个从Windows和OS X访问的Git存储库,我知道已经包含一些带有CRLF行结尾的文件.据我所知,有两种方法可以解决这个问题:

  1. 设置core.autocrlffalse无处不在,

  2. 按照指示在这里(回荡在GitHub上的帮助页)到存储库转换为只包含LF行结束,然后设置core.autocrlftrue在Windows和input在OS X上有这样做的问题是,如果我有仓库中任何二进制文件那:

    1. 在gitattributes中未正确标记为二进制文件,并且
    2. 碰巧包含CRLF和LF,

    他们会被腐化.我的存储库可能包含这些文件.

那么为什么我不应该关闭Git的行结束转换呢?网上有很多模糊的警告关于core.autocrlf关闭造成问题,但很少有具体问题; 到目前为止我唯一发现的是kdiff3无法处理CRLF结尾(对我来说不是问题),而且一些文本编辑器有行结束问题(对我来说也不是问题).

存储库是我公司的内部存储库,因此我不需要担心与具有不同autocrlf设置或行结束要求的人共享它.

是否有任何其他问题只是留下我不知道的行结尾?

git line-endings

272
推荐指数
3
解决办法
23万
查看次数

git reset --hard之后没有暂停的更改

标题说明了一切.

之后git reset --hard,git status给我Changes not staged for commit:部分内的文件.

我也尝试了git reset .,git checkout -- .并且git checkout-index -f -a无济于事.

那么,我怎样才能摆脱那些未分阶段的变化呢?

这似乎只打击Visual Studio项目文件.奇怪的.请参阅此粘贴:http://pastebin.com/eFZwPn9Z.这些文件的特殊之处在于.gitattributes我有:

*.sln        eol=crlf
*.vcproj     eol=crlf
*.vcxproj*   eol=crlf
Run Code Online (Sandbox Code Playgroud)

此外,autocrlf在我的全局中设置为false .gitconfig.这可能是某种相关的吗?

git git-reset

248
推荐指数
12
解决办法
12万
查看次数

强制LF eol在git repo和工作副本中

我在github上托管了一个git存储库.许多文件最初是在Windows上开发的,我对行结尾并不太谨慎.当我执行初始提交时,我也没有任何git配置来强制执行正确的行结束.结果是我的github存储库中有许多带有CRLF行结尾的文件.

我现在部分在Linux上开发,我想清理行结尾.如何确保文件在github上使用LF正确存储,并在我的工作副本中使用LF?

我已经设置了一个.gitattributes包含text eol=LF; 那是对的吗?有了这个承诺和推动,我可以只是rm我的本地仓库并从github重新克隆以获得所需的效果吗?

git github eol

153
推荐指数
4
解决办法
8万
查看次数

git am error:"补丁不适用"

我试图使用git将几个提交从一个项目移动到第二个类似的提交.

所以我创建了一个包含5个提交的补丁:

git format-patch 4af51 --stdout > changes.patch
Run Code Online (Sandbox Code Playgroud)

然后将补丁移动到第二个项目的文件夹并想要应用补丁:

git am changes.patch 
Run Code Online (Sandbox Code Playgroud)

...但它给了我错误:

Applying: Fixed products ordering in order summary.
error: patch failed: index.php:17
error: index.php: patch does not apply
Patch failed at 0001 Fixed products ordering in order summary.
The copy of the patch that failed is found in:
   c:/.../project2/.git/rebase-apply/patch
When you have resolved this problem, run "git am --continue".
If you prefer to skip this patch, run "git am --skip" instead.
To restore the original branch and stop …
Run Code Online (Sandbox Code Playgroud)

git

70
推荐指数
5
解决办法
9万
查看次数

Windows换行符的Unix换行符(在Windows上)

有没有人知道Windows中的一种方式(比如Powershell或工具)可以递归目录并将任何unix文件转换为Windows文件.

我对Powershell中至少检测到unix文件的方式非常满意.

对于单个文件来说,这很容易做到这一点,但我追求的是一些可扩展的东西(因此倾向于Powershellish解决方案).

powershell newline line-breaks

28
推荐指数
4
解决办法
2万
查看次数

线路结尾搞砸了Git - 如何在一个巨大的线路结束修复后跟踪另一个分支的变化?

我们正在使用第三方PHP引擎来定期更新.这些版本保存在git中的一个单独的分支上,而我们的fork是主分支.

这样我们就可以从新版本的引擎中将补丁应用到我们的fork中.

我的问题是,经过对我们分支的许多提交后,我意识到引擎的初始导入是通过CRLF行结尾完成的.

我将每个文件转换为LF,但这做了一个巨大的提交,删除了100k行并添加了100k行,这显然打破了我们打算做的事情:从第三方引擎的工厂版本中轻松合并补丁.

我知道什么?我怎样才能解决这个问题?我的fork上已经有数百个提交.

最好的方法是在初始导入之后以及在分支我们自己的fork之前以某种方式执行行结束修复提交,并在历史记录中删除那个巨大的行结束提交.

但是我不知道如何在Git中这样做.

谢谢!

git history rewrite branch newline

24
推荐指数
1
解决办法
1万
查看次数

我可以将git存储库复制到Windows吗?

我正在将一台git存储库从我的Linux机器移动到Windows机器上.我希望只是移动整个目录树,发现事情将"正常工作".是这样的吗?我是否需要对行结尾做任何事情?

git

19
推荐指数
2
解决办法
8089
查看次数

为什么不"git reset HEAD"撤消我未提交的,未分级的更改?

我以前能够通过执行"Discard"功能来撤消SourceTree的更改,该功能在引擎盖下生成此命令:

git -c diff.mnemonicprefix=false -c core.quotepath=false reset -q HEAD -- myproj.csproj 
git -c diff.mnemonicprefix=false -c core.quotepath=false checkout HEAD -- myproj.csproj
Run Code Online (Sandbox Code Playgroud)

突然间这不起作用.我做丢弃,没有错误发生,重新审视视图,但文件仍然"修改".然后我尝试在命令行中使用以下相同的结果:

c:\myproject> git reset HEAD

Unstaged changes after reset:
M       myproj.csproj
Run Code Online (Sandbox Code Playgroud)

为什么它仍然被列为未分阶段的变化?

我已经验证该文件确实可写(没有进程持有锁)

更新

git checkout 也不起作用:

C:\myproject>git checkout myproj.csproj

C:\myproject>git status
# On branch master
# Changes not staged for commit:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#       modified:   myproj.csproj
# …
Run Code Online (Sandbox Code Playgroud)

git

17
推荐指数
2
解决办法
1万
查看次数

git应该改变行的结尾吗?(控制+第一行末尾的M或^ M)

pull从windows机器上使用git 代码.

当其他开发人员pull在他们的liunx机器上从服务器开发文件时,他们就^M在第一行的末尾.

怎么能让git为我照顾这个?

我的意思是,git当我(从我的窗口机器)推送服务器上的代码时,应该更改行的结尾(在第一行的末尾删除控件+ M或^ M).

git github github-api

10
推荐指数
2
解决办法
9736
查看次数

为什么我在git中切换分支时无法摆脱差异,以及如何解决它?

以下是命令行的一些相关输出(poshgit显示状态):

[Branch1]> git checkout Branch2
Switched to branch 'Branch2'
[Branch2 +0 ~3 -0]> 
[Branch2 +0 ~3 -0]> git diff --ignore-space-at-eol
[Branch2 +0 ~3 -0]> git checkout .
[Branch2 +0 ~3 -0]>
Run Code Online (Sandbox Code Playgroud)

我尝试了这个问题中提出的解决方案

[Branch2 +0 ~3 -0]> git reset --hard
HEAD is now at c8be749 some comment
[Branch2 +0 ~3 -0]> git reset HEAD
Unstaged another commit:
M       Src/somefile
M       Src/someotherfile.cs
M       Src/athirdfile.cs
[Branch2 +0 ~3 -0]>
Run Code Online (Sandbox Code Playgroud)

这是如何发生的,除了提交更改之外,我如何解决它,因为我似乎无法消除差异.即使藏匿也无济于事.

关于我们如何陷入这种混乱以及如何摆脱它的一些建议将非常感激.

我现在已经能够可靠地重现这一点,所以我能够获得更明确的答案.如果我刚刚克隆了我的回购,然后切换到分支然后回到主人我得到一些文件,说他们有变化.我尝试过使用core.autocrlf的设置,但这似乎只是改变了受影响的文件数量,并没有完全解决问题.

我该怎么做才能尝试解决这个日益恼人的问题?

git

10
推荐指数
2
解决办法
267
查看次数