어떤 버전의 X가 기능 Y를 도입 했습니까? 정식 리눅스 도구, 특히 GNU 코어의

내 일상 작업의 큰 부분은 동일한 소프트웨어와 같은 다른 버전의 시스템에 사용하기위한 소프트웨어를 개발하고 bash, find하고 grep. 예를 들어 코드를 단순화하는 데 유용한 기능이 있으면 가장 오래된 설치된 도구에서이 기능을 사용할 수 있는지 알아야합니다. 중요한 기능의 경우이 기능이 새로운 기능인지 또는 가장 오래된 설치된 도구에서 수년 동안 존재했는지를 아는 것도 유용합니다.

이 답변을 빠른 방법은 무엇입니까 정식 리눅스 도구, 특히 GNU 코어의 Utils 위해는? 정확도가 떨어지는 순서는 다음과 같습니다.

  • 다른 버전을 실행하는 이진 이진 검색 (sic)은 물론 궁극적 인 답변이지만 시간이 가장 많이 걸립니다. 보안상의 이유로 이전 설치를 사용할 수없는 경우가 종종 있습니다.
  • 코드를 읽는 것이 거의 좋지만 기능의 이름이 모호하거나 이름이 변수 / 함수 / 객체 이름과 직접적으로 일치하지 않거나 활성화되기 전에 구현 된 경우 엄청나게 많은 시간이 소요될 수 있습니다.
  • 사용 가능한 경우 변경 로그 는 일반적으로 기능 변경을 소프트웨어 버전에 연결합니다.
  • 커밋 로그 는 힌트를 제공 할 수 있지만 포함 할 버전을 모릅니다.
  • 매뉴얼 페이지 는 날짜를 거의 언급하지 않습니다.
  • Googling 에도 동일하게 적용되며 신뢰할 수없는 모든 소스를 제외하는 데 어려움 을 겪을 수 있습니다.


답변

일반적으로 변경 로그가 있습니다. 실제로 이것은 GPL에 의해 요구됩니다 (또는 다른 “명시된 변경 사항”). (적어도, 여러 제공자가있는 모든 경우에 효과적입니다 (GPLv2 섹션 2a 참조).

GNU coreutils 패키지와 GNU 프로젝트의 다른 모든 것들은이 파일이 가장 먼저 찾아야하며 95 %의 질문에 답해야합니다.


답변

피처 Y를 검색하기 위해 X에 적합한 소스 제어를 사용하지 않는 이유는 무엇입니까? 소스 저장소는 특정 기능이 도입 된시기를 식별하는 가장 좋은 방법입니다.

coreutils의 경우 http://git.savannah.gnu.org/cgit/coreutils.git로 이동 하여 로그 메시지 또는 Y에 속하는 것으로 식별 된 특정 코드 줄에서 Y와 관련된 키워드를 검색 할 수 있습니다. 웹 인터페이스를 직접 또는 더 나은 방법으로 소스 저장소를 스테이션에 복제하고 git-bisect , git-blamegit-log –grep을 사용하여 검색하십시오 .

그런 다음 git-describe 를 사용 하여 특정 commmit에 가장 가까운 태그를 찾으십시오. 태그는 대부분 버전 번호에 사용되므로 커밋을 도입 한 버전을 제공합니다.

X와 소스 제어에 따라 위의 방법을 적용 할 수 있습니다.


답변

데비안 과 같은 플랫폼 데비안에서 파생 된 우분투를 :

sudo apt-get changelog coreutils > changelog.txt

GNU Core Utilities의 changelog를 version으로 되돌립니다 4.5.1-1.

다른 플랫폼에 비슷한 편리한 솔루션이 있는지 확실하지 않습니다.