我有一个从Windows和OS X访问的Git存储库,我知道已经包含一些带有CRLF行结尾的文件.据我所知,有两种方法可以解决这个问题:
设置core.autocrlf到false无处不在,
按照指示在这里(回荡在GitHub上的帮助页)到存储库转换为只包含LF行结束,然后设置core.autocrlf要true在Windows和input在OS X上有这样做的问题是,如果我有仓库中任何二进制文件那:
他们会被腐化.我的存储库可能包含这些文件.
那么为什么我不应该关闭Git的行结束转换呢?网上有很多模糊的警告关于core.autocrlf关闭造成问题,但很少有具体问题; 到目前为止我唯一发现的是kdiff3无法处理CRLF结尾(对我来说不是问题),而且一些文本编辑器有行结束问题(对我来说也不是问题).
存储库是我公司的内部存储库,因此我不需要担心与具有不同autocrlf设置或行结束要求的人共享它.
是否有任何其他问题只是留下我不知道的行结尾?
标题说明了一切.
之后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.这可能是某种相关的吗?
我在github上托管了一个git存储库.许多文件最初是在Windows上开发的,我对行结尾并不太谨慎.当我执行初始提交时,我也没有任何git配置来强制执行正确的行结束.结果是我的github存储库中有许多带有CRLF行结尾的文件.
我现在部分在Linux上开发,我想清理行结尾.如何确保文件在github上使用LF正确存储,并在我的工作副本中使用LF?
我已经设置了一个.gitattributes包含text eol=LF; 那是对的吗?有了这个承诺和推动,我可以只是rm我的本地仓库并从github重新克隆以获得所需的效果吗?
我试图使用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) 有没有人知道Windows中的一种方式(比如Powershell或工具)可以递归目录并将任何unix文件转换为Windows文件.
我对Powershell中至少检测到unix文件的方式非常满意.
对于单个文件来说,这很容易做到这一点,但我追求的是一些可扩展的东西(因此倾向于Powershellish解决方案).
我们正在使用第三方PHP引擎来定期更新.这些版本保存在git中的一个单独的分支上,而我们的fork是主分支.
这样我们就可以从新版本的引擎中将补丁应用到我们的fork中.
我的问题是,经过对我们分支的许多提交后,我意识到引擎的初始导入是通过CRLF行结尾完成的.
我将每个文件转换为LF,但这做了一个巨大的提交,删除了100k行并添加了100k行,这显然打破了我们打算做的事情:从第三方引擎的工厂版本中轻松合并补丁.
我知道什么?我怎样才能解决这个问题?我的fork上已经有数百个提交.
最好的方法是在初始导入之后以及在分支我们自己的fork之前以某种方式执行行结束修复提交,并在历史记录中删除那个巨大的行结束提交.
但是我不知道如何在Git中这样做.
谢谢!
我正在将一台git存储库从我的Linux机器移动到Windows机器上.我希望只是移动整个目录树,发现事情将"正常工作".是这样的吗?我是否需要对行结尾做任何事情?
我以前能够通过执行"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) 我pull从windows机器上使用git 代码.
当其他开发人员pull在他们的liunx机器上从服务器开发文件时,他们就^M在第一行的末尾.
怎么能让git为我照顾这个?
我的意思是,git当我(从我的窗口机器)推送服务器上的代码时,应该更改行的结尾(在第一行的末尾删除控件+ M或^ M).
以下是命令行的一些相关输出(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 ×9
github ×2
newline ×2
branch ×1
eol ×1
git-reset ×1
github-api ×1
history ×1
line-breaks ×1
line-endings ×1
powershell ×1
rewrite ×1