강의/부캠 안드로이드 학습정리

day 9. git 저장소 만들기

배경지식에서 유용한 정보들이 많아서 보고, 링크한것들도 유용해서 여기에서도 링크

http://rogerdudler.github.io/git-guide/index.ko.html

 

git - 간편 안내서 - 어렵지 않아요!

 

rogerdudler.github.io

https://git-scm.com/book/ko/v2/Git%EC%9D%98-%EA%B8%B0%EC%B4%88-%EB%A6%AC%EB%AA%A8%ED%8A%B8-%EC%A0%80%EC%9E%A5%EC%86%8C

 

Git - 리모트 저장소

원격 저장소라 하더라도 로컬 시스템에 위치할 수도 있다. remote'' 저장소라고 이름이 붙어있어도 이 원격 저장소가 사실 같은 로컬 시스템에 존재할 수도 있다. 여기서 remote'' 라는 이름은 반드

git-scm.com

https://git-scm.com/book/ko/v2/Git%EC%9D%98-%EB%82%B4%EB%B6%80-Git-%EA%B0%9C%EC%B2%B4

 

Git - Git 개체

여러분이 사용하는 쉘이 어떤 것인가에 따라 master^{tree} 표현식이 오류를 일으킬 수도 있다. Windows 에서 CMD는 ^ 문자는 이스케이프 기호로 사용한다. ^ 문자를 제대로 사용하려면 git cat-file -p master

git-scm.com

https://git-scm.com/book/ko/v2/Git%EC%9D%98-%EB%82%B4%EB%B6%80-Git-Refs

 

Git - Git Refs

중요한 개체 세 가지는 모두 살펴봤고(Blob, Tree, 커밋) 살펴볼 개체가 하나가 남았다. 태그 개체는 커밋 개체랑 매우 비슷하다. 커밋 개체처럼 누가, 언제 태그를 달았는지 태그 메시지는 무엇이

git-scm.com

 

생각만큼 이번 과제가 많이 힘들었따.. 진짜 첫날부터 이거 하라고 했으면 바로 포기했을듯.

이 이주일 사이에그새 성장한 모양이다. 얼마나 굴렸으면..


명령어를 정규식으로 받으면 좋긴 한데 때론 그냥 split(" ")로 받는게 더 깔끔하고 안정적이고 보기 좋은 것 같다. 너무 정규식만 쓸려고 하지 말자. 그럼 이렇게 할 때 뒤 단어들 합치기

order = readLine()!!.split(" ")

"commit" ->{
                message = ""
                for (i in 1..order.lastIndex) message += "${order[i]} "
                commit.commit(message)
            }

깊은 복사를 하기 위해 cloneable를 상속해서 override clone 하면 된다. data class에도 cloneable된다.

enum class

import java.util.*

data class File(var name: String, var lastEdited: Date, var content: String){
    val fileStatus = {"$name(${content.length})"}
    val fileStatusWithDate = {"${fileStatus()}\t$lastEdited"}
    var status = FileStatus.UNSTAGED
}

data class GitLogFile(val name: String, val logs: List<CommitLog>)

enum class FileStatus{
    UNSTAGED, STAGED, COMMITTED
}

FileStatus안에 UNSTAGED, STAGED, COMMITTED 라는 클래스가 있는것. 그냥 새로운 이름을 짓는걸로 생각했는데 그거 이상인 것 같다. 아님 그냥 상수처럼 쓰던지.

 

reduce

    //log
    private fun printLog() {
        val strLog = curRepos!!.commitLogs.map {
            "commit \"${it.message}\"\n" +
                    it.files
                        .map { f -> f.fileStatusWithDate()}
                        .reduce { acc, s -> "$acc\n$s" }
        }.reduce { acc, s -> "$acc\n$s" }

        println(strLog)
    }

위의 것은 reduce 한게 String list라서 이것들을 reduce로 합친것.

 

해시 고유값

hash = UUID.randomUUID().toString()

 

실제 github에서는 .git 안에 모든 정보가 다 있는듯.

상태정보.. 흐름에 대해 코딩

클래스가 많으면 어쨌든 그 안에서 다 처리하도록 만들 수 있으니까 이 점에선 좋은 듯.

 

결과 내놓고 축약한건 실험 안해도 되겠지 하고 최종으로 내놓았는데 결국 버그 떴음.. 마지막의 마지막까지 꼭 테스트 해보고 최종 commit 하자.