[Git 만들어보기 - Geet] init 명령어로 geet 저장소 초기화하기 (재구현)

송준섭 Junseop Song·2024년 3월 18일

Git 만들어보기 - Geet

목록 보기
17/21
post-thumbnail

2024-02-29 구현

깃을 이용하려면 우선 해당 작업 디렉토리를 깃 저장소로 초기화 해야 함

이 때 사용하는 명령어가 init

init 명령어를 실행하면 .git 폴더와 함께 그 안에 필요한 파일 및 폴더들을 생성해 줌

// geet/command/geetInit.kt
package geet.command

import geet.exception.BadRequest
import geet.util.const.red
import geet.util.const.resetColor
import java.io.File

fun geetInit(commandLines: Array<String>): Unit {
    if (commandLines.size != 1) {  // 다른 옵션과 함께 사용되지 않음
        throw BadRequest(
            "init 명령어는 다른 옵션을 받지 않습니다.: " +
                    "${red}${commandLines.toList().subList(1, commandLines.size).joinToString(" ")}${resetColor}"
        )
    }

    val geetFile = File(".geet")
    if (geetFile.exists()) {  // 이미 초기화 된 저장소라면
        throw BadRequest("이미 초기화된 Git 저장소 입니다.")
    }

    initGeetRepository(geetFile)
    println("현재 디렉토리를 Git 저장소로 초기화합니다.")

}

fun initGeetRepository(geetFile: File): Unit {  // 필요 파일들 생성
    geetFile.mkdir()
    File(geetFile, "objects").mkdir()
    File(geetFile, "objects/info").mkdir()
    File(geetFile, "objects/pack").mkdir()
    File(geetFile, "refs").mkdir()
    File(geetFile, "refs/heads").mkdir()
    File(geetFile, "refs/tags").mkdir()
    File(geetFile, "HEAD").writeText("ref: refs/heads/master")
    File(geetFile, "config").writeText(
        """
        [core]
            repositoryformatversion = 0
            filemode = true
            bare = false
            logallrefupdates = true
        """.trimIndent()
    )
    File(geetFile, "description").writeText("Unnamed repository; edit this file 'description' to name the repository.")
    File(geetFile, "hooks").mkdir()
    File(geetFile, "info").mkdir()
    File(geetFile, "info/exclude").writeText("# *.[oa]\n# *~")
}


0개의 댓글