<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>Git on 编程技术记录</title>
    <link>https://blog.z6z8.cn/tags/git/</link>
    <description>Recent content in Git on 编程技术记录</description>
    <generator>Hugo</generator>
    <language>zh-Hans</language>
    <lastBuildDate>Fri, 27 Nov 2020 10:02:24 +0000</lastBuildDate>
    <atom:link href="https://blog.z6z8.cn/tags/git/feed.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>macos 配置 git ssh访问方式</title>
      <link>https://blog.z6z8.cn/2020/11/27/macos-%E9%85%8D%E7%BD%AE-git-ssh%E8%AE%BF%E9%97%AE%E6%96%B9%E5%BC%8F/</link>
      <pubDate>Fri, 27 Nov 2020 10:02:24 +0000</pubDate>
       <guid isPermaLink="false">http://blog.z6z8.cn/?p=933</guid> 
      <description>&lt;h2 id=&#34;生成-ssh-key&#34;&gt;生成 ssh key&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ ssh-keygen -t rsa -C &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;git服务端留存的邮箱地址&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Generating public/private rsa key pair.
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Enter file in which to save the key &lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;~/.ssh/id_rsa&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;这里输入ssh key保存路径，不建议使用默认地址&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Enter passphrase &lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;empty &lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt; no passphrase&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;这里输入密码，建议输入空（方便后续配置）&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Enter same passphrase again: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;再输入一遍密码,建议输入空（方便后续配置）&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;应生成两个文件，公钥和私钥，文件名形式为 &lt;code&gt;xxx&lt;/code&gt;(私钥)， &lt;code&gt;xxx_pub&lt;/code&gt; 或者 &lt;code&gt;xxx.pub&lt;/code&gt;(公钥)。记住ssh key生成的文件路径。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;默认情况下，ssh会使用 &lt;code&gt;~/.ssh/id_rsa&lt;/code&gt; 这个私钥，但无法处理访问多个ssh远端的场景。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&#34;配置本地ssh访问git使用的私钥&#34;&gt;配置本地ssh访问git使用的私钥&lt;/h2&gt;
&lt;p&gt;打开 &lt;code&gt;~/.ssh/config&lt;/code&gt; 文件，如果没有则创建一个文本文件，添加如下内容&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 请保证 Host 和 HostName 的值相同 （macos11 实测不相同时，git ssh 访问失败）&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 远端ssh主机别名&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Host bitbucket.cmbc.com.cn
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#75715e&#34;&gt;# 远端ssh主机名（域名或者ip都可以）&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    HostName bitbucket.cmbc.com.cn
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#75715e&#34;&gt;# 鉴权文件 ，这填写ssh私钥文件路径&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    IdentityFile &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;ssh 私钥文件路径&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#75715e&#34;&gt;# 使用公钥算法进行鉴权&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    PreferredAuthentications publickey
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;关于 ssh config 更多细节参考 &lt;a href=&#34;https://linux.die.net/man/5/ssh_config&#34;&gt;https://linux.die.net/man/5/ssh_config&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>git patch 文件冲突时的解决办法</title>
      <link>https://blog.z6z8.cn/2020/07/06/git-patch-%E6%96%87%E4%BB%B6%E7%9A%84%E4%BD%BF%E7%94%A8%E6%96%B9%E6%B3%95/</link>
      <pubDate>Mon, 06 Jul 2020 10:29:08 +0000</pubDate>
       <guid isPermaLink="false">http://blog.z6z8.cn/?p=875</guid> 
      <description>&lt;h2 id=&#34;生成patch&#34;&gt;生成patch&lt;/h2&gt;
&lt;p&gt;1、生成当前分支的patch&lt;/p&gt;
&lt;p&gt;生成当前分支指定节点之后的所有patch
生成的patch，会根据节点顺序自动编号，一个commit生成一个patch文件&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;git format-patch 404777e8586393d5eb6581485fc1bb2bf2e8eb2a //这里长短commit id都可以
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;2、生成两个节点之间的patch&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;git format-patch  节点开始..节点结束 //这里长短commit id都可以
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;//例如
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;git format-patch aed12..ecf3a
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;更多详细 &lt;a href=&#34;https://blog.csdn.net/sunnylgz/article/details/7661920&#34;&gt;https://blog.csdn.net/sunnylgz/article/details/7661920&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;使用patch&#34;&gt;使用patch&lt;/h2&gt;
&lt;p&gt;生成patch相对容易，使用时却有些麻烦，尤其是有冲突的时候。
对于有冲突的patch，用搜索引擎搜索出的结果大都是&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;git apply --reject patch文件
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;//对于冲突，会生成.rej文件，然后手动解决所有冲突
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;这种办法在有冲突时，并不好用（因为根据.rej文件手动解决冲突比较麻烦）
我尝试的一个简单方法是&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;git am --3way patch文件
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;//解决冲突后
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;git am --continue
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;--3way&lt;/code&gt;，会尝试合并冲突到目标文件，而不是另生成.rej文件，这样的好处是可以使用成熟的冲突解决工具&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
