I recently purchased a new Mac and I am currently in the process of setting it up as a development machine.

Before installing Xcode I went ahead and installed:

  • Sublime Text
  • Sublime Merge

While setting up Sublime Merge I was prompted to install the Xcode Command Line Tools (Macintosh HD -> Library -> Developer -> Command Line Tools).

I went ahead and did that, and was able to successfully set up my repos on Sublime Merge.

I then installed Xcode which comes bundled with the Command Line Tools in its own package (Applications -> Xcode -> Contents -> Developer).

Right after installing Xcode I saw that in Software Update I had an update to the Command Line Tools and so I performed that.

I'm striving for a clean set up and was wondering whether or not I now have redundant copies of the Command Line Tools, if so, how do I (or do I even need to) get rid of the old tools safely?


Xcode.app provides a set of command line tools. Standalone 'Xcode Command Line Tools' provides another set. You can switch between them (see xcode-select --help).

git, gcc and many commands in /usr/bin/ is actually a jumper to the real executable of selected CLT.

Standalone CLT is almost unnecessary if you have Xcode.app installed. You can simply trash /Library/Developer/CommandLineTools to remove it.

In my case it installed these pkg (pkgutil --pkgs before and after installation)


You can use pkgutil --files <pkg_name> to see installed files. They are either in /tmp or /Library/Developer/CommandLineTools.


  • brew sometimes requires you to install standalone CLT even you have Xcode.app installed, namely python. They say some bottles (pre-built) are linked against the standalone CLT.

  • brew also requires standalone CLT when I want to build something on non-current system (Mojave after Catalina released).

Of course, you can take the risk and edit the brew formula or brew itself to avoid that.

brew edit python

  # setuptools remembers the build flags python is built with and uses them to                                          
  # build packages later. Xcode-only systems need different flags.                                                      
  pour_bottle? do
    reason <<~EOS                                                                                                       
      The bottle needs the Apple Command Line Tools to be installed.                                                    
        You can install them, if desired, with:                                                                         
          xcode-select --install                                                                                        
    satisfy { MacOS::CLT.installed? } # comment this out


      def needs_clt_installed?
        return false # <- add this
        return false if latest_sdk_version?

  • Thank you for your thorough and detailed answer, this clears things up quite a bit. Dec 26 '19 at 6:26

Not the answer you're looking for? Browse other questions tagged .