Study Programming/Git

Android Studio with Git : 파일 상태 변경하기

네모메모 2021. 8. 3. 18:58
반응형

 


 

ProGit를 찬찬히 따라 공부하는 것도 좋지만

하다보니 막상 사용해야하는 소스 파일, 브랜치 설정 및 충돌과 그 해결을 내가 임의로 만들어서라도

직접 경험해 봐야 한다는 생각이 들었다 (백문이불여일타'란 말처럼! 재미질 것 같은 사심도 있고:-))

 

특히, 내가 사용하는 IDE인 Android Studio에서의 Git 사용은 GitPro에 없기에 

내가 간단한 예제들이라도 만들어 시험해보고자 한다.

 

 

일단 Git Status를 테스타하는 예제부터~


Android Studio에서 프로젝트 파일들의 Git 상태 변경하기

 

 

Example Case) 아래와 같은 에러가 발생하며 원인과 대책은 아래와 같다.

 

아래 대책(ⓐ,ⓑ)을 작업하며 Android Studio에서 Git 상태 변경하고자 한다.

- 원인 : '.gitignore' 파일에서 gradle wrapper 관련 파일 ignore 처리하여 Gradle 버전 충돌 빌드 실패됨
          (Wrapper가 없어 프로젝트 해당 버전의 Gradle을 얻어오지 못함)
- 대책 :

             ⓐ '.gitignore' 파일에서 gradle wrapper 관련 파일들이 ignore되지 않도록 수정
             ⓑ gradle wrapper 관련 파일을 저장소에 추가

           +) gradle wrapper 관련 파일(2개) : gradle/wrapper/ 경로 내 gradle-wrapper.jar, gradle-wrapper.properties

 

 

 


 

1) 현재 상태 Git의 Status는 아래와 같다.


  - '.gitignore'파일에 gradle wrapper 관련 파일들이 포함되어 있어 해당 파일들을 ignore 처리된다.

      +) '.gitignore'의 ignore 처리 관련 설명 포스팅
 

  - '.gitignore'파일은 아무것도 수정하지 않은 Unmodified상태로 스튜디오에서 검정색    텍스트로 파일명표시된다.

 

   - ignore 처리된 파일들은 아래 이미지처럼 Git이 ignore하고 있어 옅은 황녹색    텍스트로 파일명 표시된다.
      ㄴ> 파일 : 'gradle-wrapper.jar', 'gradle-wrapper.properties'

 

[현 시점에서 $ git status]

$ git status
On branch main
Your branch is up to date with 'origin/main'.

nothing to commit, working tree clean

 


 

 

 

2) 대책 ⓐ대로 '.gitignore' 파일에서 gradle wrapper 관련 파일들이 ignore되지 않도록 수정


- 로컬의 '.gitignore'파일이 수정되어 Modified상태로 파랑색      텍스트로 파일명표시된다.

 

- gradle wrapper 관련 파일들도 더 이상 ignore되지 않아 Untracked상태 파일로 황색    텍스트로 파일명표시된다.

 

 

[현 시점에서 $ git status]

$git status [-u 옵션] : Untracked 상태 폴더의 하위 파일까지 모두 보여준다.

$ git status
On branch main
Your branch is up to date with 'origin/main'.

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

        modified:   .gitignore

Untracked files:
  (use "git add <file>..." to include in what will be committed)

        gradle/

no changes added to commit (use "git add" and/or "git commit -a")





$ git status -u
On branch main
Your branch is up to date with 'origin/main'.

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

        modified:   .gitignore

Untracked files:
  (use "git add <file>..." to include in what will be committed)

        gradle/wrapper/gradle-wrapper.jar
        gradle/wrapper/gradle-wrapper.properties

no changes added to commit (use "git add" and/or "git commit -a")

 

 

 

Git은 Untracked, Modified 상태인 파일들을 stage가능하므로 아래 3개의 파일이 모두 $git add 가능하다.
- Modified 상태 : 기존에 있던 파일이 수정된 '.gitignore'파일
- Untracked 상태 : ignore처리되지 않도록 수정하여 Git에서 확인가능해진

                         'gradle/wrapper/gradle-wrapper.jar', 'gradle/wrapper/gradle-wrapper.properties' 파일들

 

 

 


 

3) 스튜디오에서 파일 stage(=add)하려면 

             파일 선택 > (우측 마우스 버튼 > Git > Add) 또는 ('alt + ctrl + A'단축키

 

 

 


 

 

4) 스튜디오에서 Modified, Untracked파일 stage(=add)된 경우

- Modified 상태인 '.gitignore'파일 stage한 경우 (Modified -> Staged), 스튜디오에서  텍스트 색상 및 아무 변화없다.
- Untracked 상태인 파일 stage한 경우 (Modified -> Staged) : 스튜디오에서 초록색 텍스트로 파일명표시된다.
    (아래 'gradle/wrapper/gradle-wrapper.jar', 'gradle/wrapper/gradle-wrapper.properties' 참조)

 

 

 

 

[현 시점에서 $ git status]

$ git status
On branch main
Your branch is up to date with 'origin/main'.

Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

        modified:   .gitignore
        new file:   gradle/wrapper/gradle-wrapper.jar
        new file:   gradle/wrapper/gradle-wrapper.properties

 


 

 

※ ★안드로이드 스튜디오에서 Staged상태와 Modified 상태의 파일이 구분되지 않는다 ※

     

     - (Modified -> Staged)로 변경되도 구분되는 변화가 없다. cf) 다른 상태 변화의 경우 파일 텍스트 색상 변경되어 상태 구분 가능
     - Modified, Staged 상태 파일 모두 Commit이 바로 가능하다 cf) Git에서는 Staged 상태만 커밋가능하다.

 

                 ∴  Modified, Staged 상태 구분되지 않으므로 '파일 A'를 Modified -> Staged -> Another modified 해도

                     스튜디오는 마지막 수정버전(Modified)를 커밋시킨다
                     cf) Git에서는 Staged된 '파일 A'와 Another modified된 '파일 A'가 모두 존재

                         (커밋은 Another modified된 '파일 A'을 $git add했을 때 또는 현 상태의 Staged된 '파일 A'만 가능하다.)

 

 


 

5) 스튜디오에서 Staged 상태 파일 되돌리기 (Added 상태 -> Unstaged)

ㄴ> 'VCS > Git > Reset Head...' 선택 > 'Reset Heand' 팝업 > To Commit 칸에 "HEAD" 기재 확인 > [Reset]버튼 선택 >> ※ 주의) 모든 Added상태 파일이 stage 전 상태로 복구된다.

ㄴ> '$ git reset HEAD <특정파일명>' 명령은 특정파일만 Staged 상태 되돌릴 수 있는데 스튜디오에서 특정파일만 되돌리기 안된다 ㅜㅜ

Resetting HEAD...: Failed to resolve 'HEAD .gitignore' as a valid revision.

 

 

 

[현 시점에서 $ git status]

$ git status
On branch main
Your branch is up to date with 'origin/main'.

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

        modified:   .gitignore

Untracked files:
  (use "git add <file>..." to include in what will be committed)

        gradle/

no changes added to commit (use "git add" and/or "git commit -a")

 

 


 

 

5-1) '커밋하지 않은 파일'을 모두 이전 상태(Untracked or Unmodified)로 되돌리기 = 'Rollback'
- 안드로이드 스튜디오에서 제공하는 'Rollback' 기능


#1,2) 수정된 파일 선택 > (crtl+alt+z) 또는 (마우스 우측 버튼 > Git > Rollback)

                         > 'Rollback Changes'팝업에서 되돌릴 파일 확인 > [Rollback] 버튼 선택


#3) 상단 툴 'Git: '에서 Rollback아이콘 선택 > 'Rollback Changes'팝업에서 되돌릴 파일 확인 > [Rollback] 버튼 선택

 

 

 


 

 

6) 스튜디오에서 Modified, Staged 상태 파일 커밋하기 (Modified 상태 -> Commited)
- 상단 'Git:' 툴바 > 커밋아이콘 [✓] 선택 > 'Commit Changes'팝업 창에서 커밋파일 설정 및 확인

      > [Commit]버튼 선택

 

 

 

[현 시점에서 $ git status]

$ git status
On branch main
Your branch is ahead of 'origin/main' by 1 commit.
  (use "git push" to publish your local commits)

nothing to commit, working tree clean

 

 


 

6-1) 스튜디오에서 커밋과 동시에 Push하기

- 상단 'SVN:' 툴바 > 커밋아이콘 [✓] 선택 > 'Commit Changes'팝업 창에서 커밋파일 설정 및 확인

      > [Commit]버튼을 [Commit and Push]버튼으로 변경 후 선택

 

 


 

 

7) 스튜디오에서 Commited 파일 커밋메시지만 수정하기 [2가지 방법]


#1) 스튜디오 하단 툴에서 'Git' 선택 > 'Git'툴 상단에서 'Log: all' 선택 > 'Local'을 선택

       > 로컬 커밋사항 중 수정할 커밋 선택 > 오른쪽 마우스 버튼

        > 'Edit Commit Message.. (F2)' 선택 > 커밋메시지 수정

 

 

 

 


#2) 스튜디오 하단 툴에서 'Terminal' 선택 > $ git commit --amend 명령어 입력

            > 마지막 커밋사항이 에디터로 열림 > 커밋메시지 수정 후 저장하고 파일닫기!

 

 

더보기

E:\mime\git\GitStudy>git commit --amend
[main eaab1d9] [ProjSetting] Gradle 버전 충돌 문제 발생하여 Wrapper 관련 파일 추가 - Wrapper 관련 파일 :  'gradle/wrapper/gradle-wrapper.jar', 'gradle/wrapper/gradle-wrapper.properties'
 Date: Tue Aug 3 18:32:34 2021 +0900
 3 files changed, 6 insertions(+), 6 deletions(-)
 create mode 100644 gradle/wrapper/gradle-wrapper.jar
 create mode 100644 gradle/wrapper/gradle-wrapper.properties

 


 



8) 스튜디오에서 Commited 상태 파일 되돌리기 (Commited 상태 -> Untracked, Modified 상태) 
'VCS > Git > Reset Head...' 선택 > 'Reset Heand' 팝업 > To Commit 칸에 "HEAD^"로 기재 > [Reset]버튼 선택

 

ㄴ> ※ 주의) 모든 Added상태 파일이 stage 전 상태로 복구된다.
ㄴ> 'Reset Heand' 팝업에서 [Validate]버튼 선택 시 아래화면과 같이 변경했던 사항 확인 가능
ㄴ> 새로 추가된 후 커밋된 파일은 -> Untracked 상태로 되돌려 진다.
ㄴ> Modified 상태 파일은 -> Modified 상태로 되돌려 진다.

 

 

[$ git status 전 후 비교]

$ git status
On branch main
Your branch is ahead of 'origin/main' by 1 commit.
  (use "git push" to publish your local commits)

nothing to commit, working tree clean





$ git status
On branch main
Your branch is up to date with 'origin/main'.

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

        modified:   .gitignore

Untracked files:
  (use "git add <file>..." to include in what will be committed)

        gradle/

no changes added to commit (use "git add" and/or "git commit -a")

 

 


 

 

9) 스튜디오에서 커밋과 동시에 Push하기

  : 상단 'SVN:' 툴바 > Push아이콘 [↗] 선택

      > 'Push Commits to <프로젝트명>'팝업 창에서 Push할 커밋사항 설정 및 확인 > [Push]버튼 선택

 

 

 

 

[현 시점에서 $ git status]

$ git status
On branch main
Your branch is up to date with 'origin/main'.

nothing to commit, working tree clean

 

 

 

 

 


 

추가 공부할 사항들

★ 스튜디오의 'Git'탭을 통한 원격과 로컬 커밋 및 브랜치 설정이 가능하다.
★ 스튜디오의 한정적인 Git 파일의 상태변경 및 복구는 Terminal에 직접 Git명령어를 입력하므로써 디테일하게 상태변경 가능하다.

 

 

 

 


END!

 

 

 

 

 


스터디 도움 참조 블로그 (References)

- Git Status
https://git-scm.com/docs/git-status

-git commit --amend
https://stackoverflow.com/questions/30726629/git-android-studio-change-the-details-of-submitted-change-list
https://backlog.com/git-tutorial/kr/


- git add 
https://codevang.tistory.com/227

- 브랜치 명령어
https://backlog.com/git-tutorial/kr/reference/branch.html

 

 

반응형