WinMerge difftool仅在AppData临时文件中进行更改,而在实际文件中不进行更改

时间:2020-03-22 14:19:52

标签: git winmerge

我将WinMerge与git集成为difftool和mergetool。

问题是当我运行时:git difftool SomeBranch..HEAD我正确打开了WinMerge,并正确显示了左侧和右侧窗格,但是在解决了差异后,我保存并退出但文件不受影响。 我注意到打开WinMerge时,我确实看到我的所有差异都是针对AppData中的临时文件完成的。这是上部差异窗格的外观(请注意,左侧和右侧的文件夹路径均为AppData):

enter image description here

我无法使WinMerge真正正确地打开difftool并让我更改/解决差异,并不能将更改真正保存到真实文件中-任何线索如何解决此问题?

注意:当“ mergetool”出现时,不会发生此问题(仅在difftool中)

注意:当像这样修改当前目录中的更改时:git difftool-不会发生问题(Winmerge在右窗格中显示实际文件,而不是临时文件)

这是我的.gitconfig文件设置:

[mergetool]
    prompt = false
    keepBackup = false
    keepTemporaries = false

[merge]
    tool = winmerge

[mergetool "winmerge"]
    name = WinMerge
    trustExitCode = true
    cmd = "/c/Program\\ Files\\ \\(x86\\)/WinMerge/WinMergeU.exe" -u -e -dl \"Local\" -dr \"Remote\" $LOCAL $REMOTE

[diff]
    tool = winmerge

[difftool "winmerge"]
    name = WinMerge
    trustExitCode = true
    cmd = "/c/Program\\ Files\\ \\(x86\\)/WinMerge/WinMergeU.exe" -u -e $LOCAL $REMOTE

其他详细信息:

WinMerge版本:2.16.6.0

操作系统:Windows 10

Git版本:2.24.1.windows.2

1 个答案:

答案 0 :(得分:1)

仅当您将提交与工作树文件进行比较时,才能在工作树中编辑文件。当您运行

class ReviewsController < ApplicationController
  before_action :set_tea, only: [:new, :index, :create]
  before_action :set_review, only: [:show, :edit, :update, :destroy]

  # POST /teas/1/reviews
  def create
    # creating the review off the tea reveals intent better than doing
    # it off the user
    @review = @tea.reviews.new(review_params) do |r|
      r.user = current_user
    end
    # Always check if the record is actually persisted 
    # - not just if the applications validations pass!
    if @review.save
      # you could also redirect to the review but this makes more 
      # sense from a ux perspective
      redirect_to @tea, notice: 'Thank you for your review'
    else
      render :new
    end
  end

  # GET /reviews/:id/edit
  def edit
  end

  # PUT|PATCH /reviews/:id
  def update
    if @review.update(review_params)
      redirect_to @review, notice: 'Review updated.'
    else
      render :edit
    end
  end

  private
  def set_tea
    @tea = Tea.find(params[:tea_id])
  end

  def set_review
    @review = Review.find(params[:id])
  end

  def review_params
    params.require(:review).permit(:rating, :title)
  end
end

您将git difftool SomeBranch 上的文件与工作树进行比较,然后可以编辑工作树文件。

但是当你跑步

SomeBranch

您比较两次提交。 git difftool SomeBranch..HEAD 将它们视为与工作树无关,因此,正如您所观察到的那样,您的所有编辑最终都存储在临时文件中。