포스트

2021-05-12-TIL

Git에서 파일 이름 대소문자 변경 반영하기

macOS의 기본 파일 시스템이나 Windows의 NTFS는 대소문자를 구분하지 않는다. Git은 git init이나 git clone 때 파일 시스템을 검사해서 이런 환경이면 core.ignoreCase를 true로 둔다(git-config). 그래서 Item.java를 item.java로 바꿔도 Git은 같은 파일로 보고 변경을 잡지 않는다. 그런데 리눅스 서버나 CI는 대소문자를 구분하므로, 로컬에서는 빌드되는데 서버에서는 클래스나 파일을 못 찾는 문제가 생긴다.

이름 변경을 Git에 직접 알려 주면 된다. 임시 이름을 한 번 거치면 대소문자를 구분하지 않는 환경에서도 확실하게 반영된다.

1
2
git mv Item.java temp.java
git mv temp.java item.java

참고한 글에 따르면 Git 2.21.0 이전에는 git mv --force user.ts User.ts처럼 --force를 붙여야 했고, 이후 버전은 git mv user.ts User.ts만으로 대소문자 변경을 인식한다. 탐색기나 셸에서 이름만 바꾸면 스테이지에 변경이 나타나지 않으므로, 어느 방법이든 git mv를 거쳐야 한다.


TODO

  • isPlaying 랜덤으로 생성
  • playing의 값들을 null로 생성
  • average 계산
  • game, team에 대한 더미 데이터 추가
  • average 소수점 셋째자리까지 표시

타율 같은 평균은 String.format("%.3f", average)로 소수점 셋째 자리까지 표시할 수 있다. 정수끼리 나누면 소수점이 버려지므로 (double) hits / atBats처럼 먼저 실수로 바꿔야 한다. 타석이 0인 선수는 0으로 나누게 되므로 따로 처리해야 한다.

더미 데이터는 아래처럼 넣었다. game은 경기마다 홈 팀과 원정 팀 이름, 점수, 종료 여부를 갖고, team은 팀 이름과 현재 경기 중인지(is_playing)를 갖는다.

1
2
3
4
5
6
7
8
9
10
11
INSERT INTO `baseball`.`game` (`id`, `home_score`, `away_score`, `is_end`, `home_name`, `away_name`) VALUES ('1', '0', '0', '0', 'Samsung Lions', 'KIA Tigers');
INSERT INTO `baseball`.`game` (`id`, `home_score`, `away_score`, `is_end`, `home_name`, `away_name`) VALUES ('2', '0', '0', '0', 'NC Dinos', 'Hanwha Eagles');
INSERT INTO `baseball`.`game` (`id`, `home_score`, `away_score`, `is_end`, `home_name`, `away_name`) VALUES ('3', '0', '0', '0', 'Lotte Giants', 'Doosan Bears');
INSERT INTO `baseball`.`game` (`id`, `home_score`, `away_score`, `is_end`, `home_name`, `away_name`) VALUES ('4', '0', '0', '0', 'SSG Landers', 'LG Twins');
INSERT INTO `baseball`.`game` (`id`, `home_score`, `away_score`, `is_end`, `home_name`, `away_name`) VALUES ('5', '0', '0', '0', 'New York Yankees', 'New York Mets');
INSERT INTO `baseball`.`game` (`id`, `home_score`, `away_score`, `is_end`, `home_name`, `away_name`) VALUES ('6', '0', '0', '0', 'Los Angeles Dodgers', 'Boston Red Sox');
INSERT INTO `baseball`.`game` (`id`, `home_score`, `away_score`, `is_end`, `home_name`, `away_name`) VALUES ('7', '0', '0', '0', 'Atlanta Braves', 'Los Angeles Angels');
INSERT INTO `baseball`.`game` (`id`, `home_score`, `away_score`, `is_end`, `home_name`, `away_name`) VALUES ('8', '0', '0', '0', 'St. Louis Cardinals', 'Chicago Cubs');
INSERT INTO `baseball`.`game` (`id`, `home_score`, `away_score`, `is_end`, `home_name`, `away_name`) VALUES ('9', '0', '0', '0', 'Toronto Blue Jays', 'San Francisco Giants');
INSERT INTO `baseball`.`game` (`id`, `home_score`, `away_score`, `is_end`, `home_name`, `away_name`) VALUES ('10', '0', '0', '0', 'Houston Astros', 'San Diego Padres');
INSERT INTO `baseball`.`game` (`id`, `home_score`, `away_score`, `is_end`, `home_name`, `away_name`) VALUES ('11', '0', '0', '0', 'Philadelphia Phillies', 'Cleveland Indians');
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
INSERT INTO `baseball`.`team` (`name`, `is_playing`) VALUES ('Samsung Lions', '0');
INSERT INTO `baseball`.`team` (`name`, `is_playing`) VALUES ('KIA Tigers', '1');
INSERT INTO `baseball`.`team` (`name`, `is_playing`) VALUES ('NC Dinos', '0');
INSERT INTO `baseball`.`team` (`name`, `is_playing`) VALUES ('Hanwha Eagles', '0');
INSERT INTO `baseball`.`team` (`name`, `is_playing`) VALUES ('Lotte Giants', '1');
INSERT INTO `baseball`.`team` (`name`, `is_playing`) VALUES ('Doosan Bears', '0');
INSERT INTO `baseball`.`team` (`name`, `is_playing`) VALUES ('SSG Landers', '0');
INSERT INTO `baseball`.`team` (`name`, `is_playing`) VALUES ('LG Twins', '0');
INSERT INTO `baseball`.`team` (`name`, `is_playing`) VALUES ('Atlanta Braves', '0');
INSERT INTO `baseball`.`team` (`name`, `is_playing`) VALUES ('Boston Red Sox', '0');
INSERT INTO `baseball`.`team` (`name`, `is_playing`) VALUES ('Chicago Cubs', '0');
INSERT INTO `baseball`.`team` (`name`, `is_playing`) VALUES ('Cleveland Indians', '0');
INSERT INTO `baseball`.`team` (`name`, `is_playing`) VALUES ('Houston Astros', '0');
INSERT INTO `baseball`.`team` (`name`, `is_playing`) VALUES ('Los Angeles Angels', '0');
INSERT INTO `baseball`.`team` (`name`, `is_playing`) VALUES ('Los Angeles Dodgers', '0');
INSERT INTO `baseball`.`team` (`name`, `is_playing`) VALUES ('New York Mets', '0');
INSERT INTO `baseball`.`team` (`name`, `is_playing`) VALUES ('New York Yankees', '0');
INSERT INTO `baseball`.`team` (`name`, `is_playing`) VALUES ('Philadelphia Phillies', '0');
INSERT INTO `baseball`.`team` (`name`, `is_playing`) VALUES ('San Diego Padres', '0');
INSERT INTO `baseball`.`team` (`name`, `is_playing`) VALUES ('St. Louis Cardinals', '0');
INSERT INTO `baseball`.`team` (`name`, `is_playing`) VALUES ('Toronto Blue Jays', '0');


데모 흐름

  1. 게임 스타트를 누르면 게임 리스트가 받아와진다.
  2. 진행 중인 게임에 대해서는 선택이 안 되도록 했습니다.
  3. 그러면 첫 번째 팀을 선택하고 player 표시가 뜨고
  4. 마우스로 상단의 버튼을 슬라이드하면 스코어 현황판이 뜨고
  5. 아래쪽을 슬라이드하면 선수별 스코어 현황판이 보입니다.
  6. 그리고 PITCH 버튼을 누르면, 일정 비율에 따라 strike, ball, 안타가 결정되고,
  7. 4 ball이면 진루, 3 strike 면 아웃이 됩니다.
  8. 옴팡이가 홈에 들어오면 점수가 올라갑니다.

아쉬운 점

  • VPC 사용
  • 프론트 서버 배포 - 제인
  • OAuth 적용
  • API 문서 자동배포 서버 - 프레디
  • 소켓 기반으로 야구게임 -> 프론트
참고한 자료외부 출처 2

외부 출처

이 글은 저작권자의 CC BY 4.0 라이선스를 따릅니다.

댓글

아직 댓글이 없습니다