SVN沖突出現原因及解決方法淺談


緣由

很簡單,用svn合base,出現了各種各樣奇怪的問題,雖然最終沒有造成什么大的線上問題,但過程也是曲折的,耗費個人精力,也占用他人資源,不好不好,一點都不佛系。

究其原因,還是對為什么出現各種沖突不明了,查了些資料,稍微實踐和思考了下,有點理解分享出來。


沖突出現原因

總結起來一句話:在不同版本的同一個位置出現了不同的東西。

具體解釋如下:

  • 版本:每一次提交都會是當前項目的一個版本,會有一個編號;
  • 不同版本:沖突一定是出現在不同版本間的,通常是出現在相隔兩個版本號的兩個版本之間;
  • 同一個位置:這里指的是同一個文件路徑,或者同一個文件路徑下同一個文件中的同一行等;
  • 不同的東西:這里說的是不同的代碼,或者不同的路徑,或者不同的文件;

舉個栗子:

  • 程序員A在版本1001編寫了文件a和文件b,文件a中第5行代碼為
print("shit happens")
  • 程序員BUpdate代碼后,在1001版本上編寫了文件a,把第5行代碼改寫為
print("who says")
  • 並上傳代碼,生成版本1002;
  • 程序員A發覺代碼不對(拖出去祭天),修改a文件第5行代碼為
print("no shit happens")
  • 並提交代碼,svn提示 out of date
  • 更新代碼,提示沖突

不想解釋了,自己對照着看吧。

同理,文件的沖突也是這樣,有人刪除了文件,甚至文件夾等

這篇博客:svn conflict 沖突解決 用截圖展示了過程,可以看下。


解決沖突

總結起來一句話:根據改動內容以及項目情況決定。

具體而言,這是一句廢話,但又是最容易忘記的真理。

舉個栗子

  • A改了文件b,文件a,刪除了文件c,提交了代碼,版本號1003
  • B更新代碼,改動了文件b,改動了文件d,提交代碼,版本號1004
  • 經過了多次變動...
  • A修改了文件b,提交代碼,有沖突,沖突情況為
  1. 文件b代碼沖突;
  2. 文件d代碼沖突
  3. 文件a tree conflict
  4. 版本號1100
  5. 其他

分析下

  1. 文件b大家都動了,這個時候要特別小心的看別人的代碼是干嘛的,再根據自己代碼的作用進行處理;常規動作是,都保留,排排順序;
  2. 文件d,程序A從來沒有操作過,應該是不應該出現代碼沖突的,以1009版本代碼為准即可;(當然還是要具體看看哪里出現沖突的,應該是之前代碼不規范書寫導致)
  3. 文件a出現tree conflict,也就是說a應該是被刪除了,咨詢之前的開發人員,為啥刪了我的a~~~然后刪除他;
  4. 注意自己的版本號什么的,信息和數據是王道

另外,比如后端程序員合分支遇到前端代碼沖突的,請盡量不要亂動好么~~


以上,以及以下

以上就是我大概踩過的坑了

另外,這兩天還有一些學習記錄下

StringUtils.defaultString

org.apache.commons.lang3.StringUtils.defaultString

String a = "ddd";
String v = StringUtils.defaultString(a,null);
//等價於
String vv = null == a ? null : a;

看似廢物,但是,若是

StringUtils.defaultString(classA.getData().getIou(),null);
null == classA.getData().getIou() ? null : classA.getData().getIou();

哪一個更清爽?

Byte

前兩天,被一個Byte的比較給搞暈了...郁悶

其實就是一篇博客的問題

Java 有8中基本數據類型,分別是byte、int、long、char、float、double、boolean。
1.byte、char的簡單介紹
有時候總是搞不清byte、char,所以就現在好好的整理一下:

一個byte型整數在內存中占8位,也就是一個字節. 表數范圍:-128 --127 . (字符類型char 2個字節)。

Java 中整形常量有三種表示方式:

其中8進制的整數常量以0開頭. 16進制的整數以0x或0X開頭,10-15分別a-f開頭(此處的a--f不區分大小寫)來表示.

字符型

字符型通常用於表示單個字節,字符常量必須使用單引號('')括起來.JAVA語言使用16位的Unicode編碼集作為編碼方式,它支持各種語言的字符.

字符常量有三種表示形式:

直接通過單個字符來指定字符常量:例如,'A'、'a'、'8'等。
通過轉義字符表示特殊的字符常量.例如:'\n'、'\t'等。
直接適用Unicode值來表示字符常量.格式是:'\uXXXX',其中XXXX代表一個16的整數.
字符型常量也可以用16進制編碼方式表示,范圍是:'\u0000'----'\uFFFF',一共可以表示65536個字符,其中前256個字符('\u0000'---'\u00FF')和ASCII碼中的字符完全重合.

不僅如此,字符型的值也可以作為整數型來使用,但它是無符號整數,即全部是整數,但他是一個16位的無符號整數,表數范圍:0----65535.

如果把一個0---65535內的int型整數賦給char類型的變量,系統會自動把這個int型整數當成char類型來處理。

下面是一個簡單的例子:

public class TestChar {  
  
    public static void main(String[] args) {  
        //直接指定單個字符作為字符常量  
        char aChar='a';  
        //使用轉義字符作為字符常量.  
        char enterChar='\r';  
        //使用Unicode編碼值來作為字符常量  
        char ch='\u9999';  
        System.out.println(ch);  
        //定義一個中字符常量  
        char zhong='中';  
        //直接將一個char變量當成int變量類型使用  
        int zhongValue=zhong;  
        System.out.println(zhongValue);  
        //直接將一個0--65535的int型整數賦值給一個char變量  
        char c=97;  
        System.out.println(c);  
    }  
}

2.轉義字符

Java中的單引號、雙引號和反斜線都有特殊的用途,應該使用轉義字符的表示形式.

例如我們想在JAVA程序中表示一個絕對路徑:"c:\codes,但這種寫法得不到我們希后一個反斜線組成望的結果,因為JAVA會把反斜線當成轉義字符,所以我們應該寫成如下形式:"c:\codes",只有同時寫兩個反斜線,JAVA會把第一個反斜線當成轉義字符,和后一個反斜線組成真正的斜線.

JAVA中 常用的轉義字符:

\b 退格符

\n 換行符

\r 回車符

\t 制表符

" 雙引號

' 單引號

\ 反斜線

3.強制類型轉換
下面程序示范了強制類型轉換的實例

public class NarrowConversion {  
    public static void main(String[] args) {  
        int iValue=233;  
        //強制把一個int類型的值轉換成byte類型的值  
           byte bValue=(byte) iValue;  
           //將輸出-23  
           System.out.println(bValue);  
             
             double dValue=3.98;  
           //強制把一個double型的值轉換為int  
             int i=(int) dValue;  
             System.out.println(i);  
    }  
}

運行后的輸出結果:

-23  
3

上面程序中,將一個233整型強制類型轉換為byte類型,從而變成了-23,這就是典型的溢出。

現在就上面的結果進行一下分析:

首先我們來了解一知識下計算機的基礎:

所有數字在計算機底層都是以2進制形式存在的 ,原碼就是直接將一個10進制數轉換成2進制數,但計算機是以補碼的形式保存所有的整數。補碼的計算規則如下:正數的補碼和原碼完全相同,負數的補碼是其反碼加1;反碼是對原碼按位取反,除了最高位(符號位)保持不變。

現在繼續,看看上面的轉換問題,下面示范了轉換的過程:

//32位的int型 00000000000000000000000011101001  
//轉換為8位的byte型11101001

上圖,就是負數補碼和源碼轉換的示意圖!

下面的程序時隨機生成一個6位的字符串!

public class RandomStr {  
  
    public static void main(String[] args) {  
          
        //定義一個空的字符串  
        String result="";  
        //進行6次循環  
        for(int i=0;i<6;i++){  
            //生成一個97--122的int型整數  
             int intVal=(int) (Math.random() *26+97);  
             //將int 強制轉換為char后連接到result后面  
             result=result+(char)intVal;  
        }  
        //隨機輸出字符串  
        System.out.println(result);  
        System.out.println((char)97);  
        System.out.println((char)122);  
    }  
}

對於我而言,其實就是記得Byte是小型的int就好了..基本類型哦~

java中計時

long begintime = System.currentTimeMillis();
long endtinme=System.currentTimeMillis();
long costTime = (endtime - begintime);

當然,還有啥更精確的計時

也就是說第一種方法計算毫秒級的,這個能精確到納秒級,對於我的level來說,脫褲子放屁誒~

tomcat中war和war explode部署方式

war模式:將WEB工程以包的形式上傳到服務器 ;

war exploded模式:將WEB工程以當前文件夾的位置關系上傳到服務器;

Tomcat部署時war和war exploded區別以及平時踩得坑這篇講的還是挺准確的

所以,我會用tomcat發布自己的東西哈?


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM