초기 세팅

git config --global user.name "name"
git config --global user.email "name@mail"

# 새로운 폴더/Project를 만드는 경우
git init

 

작업트리/스테이지/저장소 관리

git status

# File 수정

# 스테이지 등록
git add "file name"

# 저장소 업로드
git commit -m "msg txt"

git log

##################################

# add + commit 동시에
git commit -am "msg txt"

* .gitignore 파일 내에 버전관리에서 제외할 파일 or 디렉토리를 작성하면 버전 관리에서 제외 할 수있음.

 

Git 작업 되돌리기

스테이지에 올라가지 않은 상태에서는 git checkout -- "file name"으로 되돌리 수 있음.

스테이징이(add) 된 경우에는 git reset HEAD "file name" 로 되돌릴 수 있음.

최신 커밋을 되돌리는 방법으로는 git reset HEAD^ 로 수행 가능함.

마지막으로 특정 commit으로 되돌리는 방법으로는 git log에서 기록을 보고 git reset --hard "commit hash"로 되돌릴 수 있음. 하지만 reset을 하면 그 사이의 commit된 version들은 삭제됨. 삭제를 하지 않으려면 revert를 사용면 됨. 

git checkout -- "file name"

git reset HEAD "file name"

git reset HEAD^

git reset --hard "commit hash code"
git revert "commit hash code"

 

Git & Branch

master 브랜치에서 분기로 user마다 새로운 브랜치를 만들어서 사용할 수 있습니다. 그리고 수정된 내용을 master로 다시 병합하여 유지/보수 할 수있음. 브랜치를 만드는 방법으로는 아래 명령어가 있습니다.

git branch    # branch 조회


git branch (branch name A)  # 새 branch 생성 (HEAD -> master, A)


git checkout (branch name)  # 해당 branch로 이동


git checkout master
git merge (branch name)  # A로 하면 A를 master로 merge함 (--no-edit 옵션도 있음)


git brance -d (branch name)  # 해당 branch를 삭제 (완전 삭제는 아님)

같은 파일의 다른 위치를 수정한 경우 병합하면 자동으로 한개의 파일로 합쳐짐. 하지만 같은 파일 내 같은 위치를 수정한 경우에는 CONFLICT 경고가 나오고 충돌이 생긴 file에 표시가 되어있음. 이 부분이 해결되야 merge가 정상적으로 진행이 됨. (P4Merge, Meld 같은 프로그램으로 이런 충돌을 관리할 수 있음)

 

Github

git remote add origin (github link)   # Github에 연동 시작
또는
git clone (github link) (Dir path)


git remote -V    # Github 연결 상태 확인


git push -u origin master   # commit을 한 file을 github에 업로드

###########################################

 # pull 전에 미리보기
git fetch 
git checkout FETCH_HEAD

git diff HEAD origin/master  # 바뀐 내용만 보기

git checkout master
git merge FETCH_HEAD



# origin (원격 저장소)의 내용을 master branch로 가져옴 (pull = fetch + merge FETCH_HEAD)
git pull origin master

매일 시작하기 전에 pull을 하고 시작하는 것이 충돌을 방지하는데 좋음. 그리고 git checkout -b newBranch로 하면 새로운 브랜치를 만들고 체크아웃까지 할 수 있음. 그리고 이 branch를 push 할 때에도 git push origin newBranch로 업로드를 하면 됨. branch를 원격 저장소에 업로드 했으면 merge를 위해서 new pull request를 해야함. 

'Programming > Programming Skills' 카테고리의 다른 글

Unity 게임 디자인 패턴  (1) 2020.03.18

1. Abstract, Virtual Method들을 활용한 상속 Class 들의 호출 우선순위

 - override

 - Java와는 다르게 C++, C#에서는 부모 class의 메소드들이 우선순위이고, virtual로 명시해두어야 함

 

2. Singleton Pattern (Static 함수를 활용하여 Component간의 Data 주고 받을 때)

 - Device IO, Manager Script 에 주로 사용 됨

 - onDestroy, Scene 전환 시에도 사용 됨 (전환을 시키는 script는 main camera에 두는 것이 문제 방지에 좋음)

 - Additive Loading이라는 Scene 전환 메소드: 기존의 scene에 새로운 scene을 추가하는 방식

 

3. Strategy Pattern - interface를 사용하여 알고리즘이 서로 교환 가능하도록 하는 패턴

- interface: 기능에 대한 선언 (구현과의 분리), 여러가지 기능을 사용하기 위한 단일 통로

- 같은 기능 다양한 종류를 제작 할 떄 유용

 

4. Simple Factory Pattern

- Factory: 객체 생성을 처리하는  클래스 (Simple factory: 객체 생성 전담 클래스)

    '이러이러한 메소드를 쓸 것이다.' 인터페이스에 선언을 해놓고, 가져다가 반드시 선언된 그대로 모두 구현하면 되는게 인터페이스이고,

    이러이러한 메소드가 있지만 가져다 쓰거나 오버라이드 하거나, abstract가 붙은 메소드는 반드시 구현하면 되는게 abstract class이다.

      (출처: https://marobiana.tistory.com/58 [Take Action])

- Instantiate()함수 : 게임 실행 중에 게임 오브젝트를 생성하는 함수 - Instantiate(GameObject original ,Vector3 position ,Quaternion rotation)

 

5. Factory Method Pattern

- 객체를 만드는 역할을 하는 Method : 예를 들어 어떤 종류의 객체를 몇개 만들어 줄것인지 정의를 해줌 -> 수정할 때 편리

- UseFactoryMethod: API, SDK 함수를 쓰듯이 사용, 함수를 불러서 쓸수있도록 짜여져 있으면 UseFactoryMethod에서 사용하도록 함

- 상황에 따라 수정 적용이 편리하도록 코드 작성

 

6. Abstract Factory Pattern

- Client에 연곤된 객체들의 패밀리를 반환 / 관련성 있는 여러 종류의 객체를 특정 그룹으로 묶어 한번에 일관된 방식으로 생성, 교체

- But, 인구는 인구 끼리 건물은 건물끼리 모으면 종족이 늘어날경우 수정해야할 부분이 많을 수 있다. -> 종족으로 그룹을 추가로 만들어 줌

- 그룹을 어떻게 만들지 결정하는 것도 중요함 듯! -> 최대한 main함수에서는 수정을 안하는 방향으로

- Zerg / Protos / Terran 스타를 만든다고 생각하면 될 듯!

 

7. prototype Pattern (동적 클래스 생성)

- Prototype pattern 은 object 생성에 높은 비용이 드는데 (Prefeb 등) 수 많은 생성 요청을 하는 경우, 또는 비슷한 object를 지속적으로 생성해야 할 때 유용하게 사용

- Marine m = new Marine();  =>  Marine m2 = (Marine)m.Clone(); 한 후에 속성을 변경할 수 있음.

 

8. Flyweight Pattern

- 모든 객체의 데이터 값이 같아서 공유할 수 있는 데이터를 모은다 / 나머지 데이터는 인스턴스 별로 값이 다른 외부 상태에 해당

- 한개의 고유 상태를 다른 객체에 공유하여 메모리 사용량을 줄임 (C++의 Pointer 개념)

- Factory method pattern 이용됨 (이전에 생성한 객체가 있는지 탐색하는 방법이 필요함!!! -> Object pool pattern : Dictionary 자료구조로 구현)

 

9. Object pool Pattern: 재사용 가능한 객체들을 모아 놓은 객체 풀 클래스; 자신이 사용 중인지 여부를 알 수 있는 방법을 제공함 (사용 중, 사용 안 함에 대한 Status 정보 저장 및 반환!), but 여러 곳에서 동시에 재사용하게 하진 않고 한번에 한 곳에서만 사용

 

10. Builder: 복잡한 객체의 단계별 생성에 중점을 두고 있는 패턴 / 부분부분을 먼저 생성 후 마지막 단계에서 생성한 제품을 반환

 

11. State Pattern: !isJumping 같이 현재 진행 중인 상태를 check하는 if문을 작성, but 문제 있음 -> 상태를 별도의 클래스로 캡슐화 하여 각 상태를 클래스를 이용하여 표현함 (ex. 실험의 단계 별 State를 지정해 줄 때)  <중요!!>

- Statemanager를 두고, request() 하는 방식으로 사용

- switch 문으로 하면 깔끔하게 정리됨

-  Action별로 class로 나누어서 변수를 공유하는 것을 최소화하여 유지 보슈에 용이하게 함. https://docs.google.com/document/d/1y_gtycMNrv8yAqhfS1zZU4zArrrc2-O6Wt-aaib65wg/edit

 

25.StateExB2

State.cs ConcreteStateStand.cs ConcreteStateJump.cs ConcreteStateDown.cs ConcreteStateAttack.cs ConcreteStateSkill.cs MyAction8.cs

docs.google.com

 

12. Observer Pattern: 1:N의존성 정의, Subject & Observer Interface로 Subject의 상태를 Observer에 전달

- OnNotify() 메소드로 각 observer에 전달 (foreach 문 응용)

- delegate() Function으로 같은 Patter을 개발할 수 있음. (https://shhyc1001.tistory.com/120)

- NotiHandler _notiHandler;에 Observer들을 등록해주고 쉽게 호출 가능함 / 등록하면 매개변수로 알아서 모두 호출해줌

 

13. Adapter Pattern: 인터페이스 (메소드 이름)가 달라서 코드가 복잡해지는 경우 중간에서 변환해주는 역할을 하는 Pattern / opensource 코드를 가져와서 기존에 있는 환경에서 사용할 때 주로 사용되는 패턴

- 기존 시스템에 비슷한 기능을 하지만 메소드 이름명이 다를 때 유용함, 새로운 부분or 유형이 추가된다면 수정 부분 최소화하여 오류에 대처 빨리 할 수 있음

 

14. Command Pattern: 명령 패턴은 메서드 호출을 실체화, 객체로 감싼 것

- 디커플링으로 코드가 유연 (ex. 입력키변경, 실행취소, 재실행)

- 사용자가 자신만의 입력키를 만들 때 (사용자 정의 키)

- Transform, key 등을 객체로 만들어서 Stack으로 저장

* TIP: 빈 객체를 만들어서 좌표 값으로 설정해 둘 수 있음!!

'Programming > Programming Skills' 카테고리의 다른 글

Git / Github 명령어  (0) 2022.07.17

+ Recent posts