Redmine can do some of what you're asking for. Integration works in one direction, you must reference issues in commit messages, and then this data will be available in redmine.
The data is then available in two views. The bug display will include a list of matched commits. The repository display will link commits to bug display pages.
Redmine keeps a local (bare) repository for each project. This can be the primary repo or a remote mirror. On updates, redmine parses the commit messages and updates an internal cross reference table of change_set,issue.
If the redmine repository is only used as a mirror, it will need to be updated. Updates can happen via cron or via external hook. We use a redmine github plugin and a github post-receive hook to keep redmine in sync with a primary github repository.
It works, but it is still a bit clumsy.