Git 개념과 사용법


잡담 1

Git을 처음쓰면 UI로 처리하는 툴도 많은데 왜 깜깜한 Shell에서 이런'짓'을 해야하지? 이게 트랜드라고? 라는 생각이 많이 들었었다.

그런데 한국어로 '깃' 일까 '짓' 일까?

Ref: http://www.clien.net/cs2/bbs/board.php?bo_table=park&wr_id=43154274

=> '깃' 이라고 부르는게 좋겠다.


Git이야 몇년동안 많이 써봤지만 다른 Repository를 쓴 적이 별로 없어서 마땅히 비교할만한 건 없지만


필자가 생각하는 장점

- Line 별로 Difference를 비교하기 때문에 같은파일을 여러사람이 같이 작업하기 편하다.

- 각자의 Repository를 만들기 때문에 Server가 날아가도 Client에 저장된 상태까지로는 History까지 원복가능

- 리눅스 명령어를 익히게 되고 친해진다.(당장 퇴근해야 되거나, 배우고 싶지 않은 사람에겐 단점이다.)

... 생각나면 더 쓰겠다.


필자가 생각하는 단점

- 명령어로 하는게 가장 확실해서 결국 명령어를 어렵게 익히게 한다.

- 반영하는 단계가 로컬 2단계, 서버로 1단계 분할되어 있어서 번거로울 수 있다.(반대로 안전할 수는 있다.)

- git add, git commit 등의 절차를 왜 해야 하는지 설명하기 어렵다.

- conflict를 해결하는 방법이 어렵다.



# Git 사용법

git의 첫 사용자로서 단순히 소스를 다운받아 몇가지 수정을 하고 반영하는 case에 대해서 알아보자


1. 서버로부터 소스를 가져온다.

2. 수정을 한다.

3. 서버에 반영한다.


이 동작을 위해 당신이 알아야할 git 사용법에 대해서 알아보자.


1. 서버로부터 소스를 가져온다.

$ git clone [서버에 있는 git 저장소 주소] [-b [브랜치명]]

ex) $ git clone https://github.com/tensorflow/tensorflow.git -b R0.8


1) 서버로부터 git을 가져오는 키워드 'git clone' 으로 시작

2) 서버에 있는 git 저장소 주소를 입력

3) 혹시 branch가 master(default)가 아니라면 branch명을 입력

소스를 한번 가져왔다면 ''



2. 수정을 한다.

이건 뭐 다들 알아서 고치시리라...


3. 서버에 반영한다.

$ git add [반영할 파일]

ex) $ git add . 

      => 수정된 모든 파일을 반영(반영되지 않는 경우도 있었는데 까먹음)


$ git commit [-m [반영할 제목]]

ex) $ git commit -m "test commit"

      => 그냥 'git commit'만 입력해도 vi editor 화면으로 넘어가면 좀더 상세하게 제목과 내용을 작성할 수 있다.


$ git push [origin [올릴 branch 명]]

ex) $ git push

   => 서버에 보내는 방법이다.

   => origin 은 서버를 뜻한다.

   => git clone할때 특정브랜치로 가져왔고 브랜치를 변경하지 않았다면 예제와 같이 생략 가능하다.




혼자 아주 단순히 개발할 것이라면 이 정도만 알면 되지만

안타깝게도 git의 목적은 여러사람과 같이 쓰기에 발생하는 예외케이스들이 꽤 많다.

흔히 겪었던 "나는 왜 안되지?"case를 정리해둔다.

여기 정리된 case가 아니라도 git은 에러상황에 대한 어떠한 실마리를 제공해주니 에러내용을 잘 읽고 따라해보자.


여기서 설명 >>> http://dukwon.tistory.com/10

'Git' 카테고리의 다른 글

git 트러블 슈팅(trouble shooting)  (0) 2017.02.22
git repository 끼리 merge 하기  (0) 2017.02.16
gitlab 서버 구성하기  (0) 2017.02.08

Merge sort(병합 정렬)



원칙1: 2개가 될때까지 쪼갠다.

원칙2: 2개가 되면 서로 비교해서 자리를 바꾸거나 바꾸지 않는다.

원칙3: 이렇게 조각난 2개를 4개로, 4개를 8개로... 순서를 맞추어 병합한다.


Best case: O(n

Average case: O()

Worst case: O() : 



# 재귀함수로 구현한 Merge sort

public class MergeSort implements ISort {


    @Override

    public void sort(Comparable[] array) {

        mergeSort(array, 0, array.length - 1);

    }


    private void mergeSort(Comparable[] array, int startIndex, int endIndex) {

        if (endIndex - startIndex < 1) {

            return;

        }


        int middleIndex = (endIndex + startIndex) / 2;

        mergeSort(array, startIndex, middleIndex);

        mergeSort(array, middleIndex + 1, endIndex);


        merge(array, startIndex, middleIndex, endIndex);

    }


    private void merge(Comparable[] array, int startIndex, int middleIndex, int endIndex) {

        Comparable[] mergedArray = new Comparable[endIndex - startIndex + 1];

        int indexA = startIndex;

        int indexB = middleIndex + 1;


        for (int i = 0; i < mergedArray.length; i++) {

            if (indexB > endIndex || (indexA <= middleIndex && array[indexA].compareTo(array[indexB]) < 0)) {

                mergedArray[i] = array[indexA++];

            } else {

                mergedArray[i] = array[indexB++];

            }

        }


        for (int i = 0, j = startIndex; i < mergedArray.length; i++, j++) {

            array[j] = mergedArray[i];

        }

    }

}


Reference:

https://en.wikipedia.org/wiki/Merge_sort


'Algorithms > Sorting' 카테고리의 다른 글

Quick sort(퀵 정렬)  (0) 2017.06.24
Selection sort(선택 정렬)  (0) 2017.02.08
Insertion sort(삽입 정렬)  (0) 2017.02.06
Bubble sort(거품? 정렬)  (0) 2017.02.06

Selection sort(선택 정렬)




- 1원칙: i 위치에 채워질 최저/최대값을뒤에서 찾는다.

- 2원칙i보다 가장 작은수를 찾는다.

- 3원칙: 있다면 i 자리를 바꾼다.



Best case: O()  == Worst case: O() : 어차피 다 확인해야 한다. 


public class SelectionSort {


    public void sort(Comparable[] array) {

        for (int i = 0; i < array.length; i ++) {

            int lowestIndex = i;

            for (int j = i + 1; j < array.length; j++) {

                if (array[lowestIndex].compareTo(array[j]) > 0) {

                    lowestIndex = j;

                }

            }


            // swap

            if (i != lowestIndex) {

                Comparable temp = array[i];

                array[i] = array[lowestIndex];

                array[lowestIndex] = temp;

            }

        }

    }

}


Referenced from: https://en.wikipedia.org/wiki/Selection_sort

'Algorithms > Sorting' 카테고리의 다른 글

Quick sort(퀵 정렬)  (0) 2017.06.24
Merge sort(병합 정렬)  (0) 2017.02.08
Insertion sort(삽입 정렬)  (0) 2017.02.06
Bubble sort(거품? 정렬)  (0) 2017.02.06

+ Recent posts